ExcelのVLOOKUPで#N/Aエラーが出る原因7つと対処法【データがあるのになぜ?】

VLOOKUPの#N/Aエラー、正しいデータがあるのになぜ?原因7つと対処法を解説します!
- VLOOKUPで#N/Aエラーが出る代表的な原因7パターン
- 各原因の具体的な解決方法(TRIM / VALUE / 絶対参照等)
- IFERRORで#N/Aエラーを非表示にする方法
- VBAでVLOOKUPエラーを一括チェック・修正する方法
目次
E列の検索値をクリックすると、VLOOKUPの結果がリアルタイムで変わります。エラーの原因も体験できます。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | 商品ID | 商品名 | 価格 | テスト | 検索値 | 結果 |
| 2 | A001 | ノートPC | ¥89,800 | ← 選択ノートPC | ||
| 3 | _A001 | マウス | ¥2,980 | #N/A | ||
| 4 | A002 | キーボード | ¥5,480 | #N/A | ||
| 5 | A003 | モニター | ¥32,000 | #N/A | ||
| 6 | 1001 | マウスパッド | ¥1,200 |
検索値「A001」がA列に見つかり、B列の「ノートPC」を返しました。これがVLOOKUPの正常動作です。
「␣A001」と「A001」は別の文字列です。見た目は同じでも先頭にスペースがあると不一致に。
▶ 対処法:
=VLOOKUP(TRIM(E2),A:C,2,FALSE) でTRIM関数を使ってスペースを除去A列の「1001」は数値、E列の「’1001」は文字列。見た目が同じでも型が違うと不一致に。
▶ 対処法:
=VLOOKUP(VALUE(E2),A:C,2,FALSE) でVALUE関数を使って数値に変換「B999」はA列に存在しないため、VLOOKUPは該当する値を見つけられません。
▶ 対処法:
=IFERROR(VLOOKUP(E2,A:C,2,FALSE),"") でエラー時に空白を表示Sub CheckVLOOKUPErrors()
Dim ws As Worksheet
Dim cell As Range
Dim errCount As Long
Set ws = ActiveSheet
For Each cell In ws.UsedRange
If IsError(cell.Value) Then
cell.Interior.Color = RGB(255,200,200)
errCount = errCount + 1
End If
Next
MsgBox errCount & "個のエラーを検出"
End Sub| A | B | C | D | |
|---|---|---|---|---|
| 1 | 商品ID | 商品名 | 在庫数 | VLOOKUP結果 |
| 2 | A001 | ノートPC | 15 | ノートPC |
| 3 | A002 | マウス | 230 | #N/A |
| 4 | A003 | キーボード | 87 | キーボード |
| 5 | A004 | モニター | 5 | #N/A |
| 6 | A005 | マウスパッド | 42 | マウスパッド |
| 7 | A006 | ヘッドセット | 0 | #N/A |
大量データでもVBAなら一瞬で全セルチェックできます
VLOOKUP関数の#N/Aエラーとは?
#N/Aは「No Applicable」(該当なし)の略で、VLOOKUP関数が検索値を見つけられなかった場合に表示されるエラーです。
「データがあるのにエラーになる」というケースでは、見た目にはデータが存在していても、スペースの混入や型の不一致など、人間の目では気づきにくい原因が潜んでいます。
なお、VLOOKUPの基本的な使い方については「VLOOKUP関数の使い方」で詳しく解説しています。
#N/Aエラーの原因7つと解決法
原因1: 検索値にスペース・改行が混入している
最も多い原因です。コピーペーストやデータインポート時に、セルの先頭や末尾に目に見えないスペースや改行文字が入り込むことがあります。
対処法: TRIM関数とCLEAN関数で不要な文字を除去します。
=VLOOKUP(TRIM(CLEAN(A2)),検索範囲,列番号,FALSE)
原因2: 全角・半角が一致していない
「ABC」(全角)と「ABC」(半角)はExcelでは別の文字列として扱われます。
対処法: ASC関数で半角に統一、またはJIS関数で全角に統一します。
=VLOOKUP(ASC(A2),検索範囲,列番号,FALSE)
原因3: 数値と文字列の型不一致
「123」(数値)と「’123」(文字列)は見た目が同じでも型が違うため、VLOOKUPは一致とみなしません。セルの左寄せ(数値)か右寄せ(文字列)かで判別できます。
対処法: VALUE関数で数値に変換、またはTEXT関数で文字列に変換して型を揃えます。
=VLOOKUP(VALUE(A2),検索範囲,列番号,FALSE)
=VLOOKUP(TEXT(A2,"0"),検索範囲,列番号,FALSE)
原因4: 検索範囲がずれている(相対参照のまま)
VLOOKUPの数式を他のセルにコピーした際、検索範囲が相対参照のままだと範囲がずれてしまいます。
対処法: 検索範囲を$(ドルマーク)で固定(絶対参照)します。F4キーでトグルできます。
=VLOOKUP(A2,$B$2:$D$100,2,FALSE)
原因5: 検索範囲の左端列が間違っている
VLOOKUPは検索範囲の左端列を検索するルールです。検索範囲の開始列が検索値のある列と異なると、意図した結果が得られません。
対処法: 検索範囲の左端列が検索値のある列になっているか確認。左側の列を参照したい場合はINDEX+MATCHを使います。
=INDEX(B:B,MATCH(A2,C:C,0))
原因6: 近似一致モード(TRUE/1)で検索している
VLOOKUPの第4引数がTRUE(または省略)の場合、近似一致モードになります。このモードではデータが昇順にソートされている必要があり、ソートされていないと正しく動作しません。
対処法: 第4引数に必ずFALSE(または0)を指定して完全一致モードにしましょう。
=VLOOKUP(A2,検索範囲,列番号,FALSE)
原因7: 別シート・別ファイルのリンク切れ
別ファイルを参照しているVLOOKUPで、参照元のファイルが閉じられている、またはファイルパスが変更された場合に発生します。
対処法: 参照元ファイルを開いた状態で再計算(Ctrl+Alt+F9)するか、ファイルパスを修正します。
IFERRORで#N/Aエラーを非表示にする方法
エラー原因を修正できない場合や、エラー表示を避けたい場合はIFERROR関数でエラーを非表示にできます。
=IFERROR(VLOOKUP(A2,検索範囲,列番号,FALSE),"")
=IFERROR(VLOOKUP(A2,検索範囲,列番号,FALSE),0)
=IFERROR(VLOOKUP(A2,検索範囲,列番号,FALSE),"該当なし")
IFERRORの第2引数でエラー時の代替値を指定できます。空白(””)、0、任意の文字列など用途に合わせて選びましょう。
ただし、IFERRORはエラーを隠してしまうため、根本原因の見落としにつながるリスクがあります。まずは原因を特定・修正し、どうしても消せないエラーのみIFERRORで対処しましょう。
IFERROR関数の詳細については「IFERROR関数の使い方」をご覧ください。
VBAでVLOOKUPエラーを一括チェック・修正する方法
ここまでワークシート関数での対処法を解説しましたが、大量データや複数シートでエラーチェックを行う場合はVBAが圧倒的に効率的です。
VBAマクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。
エラーセルを一括検出・ハイライトするVBA
Sub CheckVLOOKUPErrors()
Dim ws As Worksheet
Dim cell As Range
Dim errCount As Long
Set ws = ActiveSheet
For Each cell In ws.UsedRange
If IsError(cell.Value) Then
cell.Interior.Color = RGB(255, 200, 200)
errCount = errCount + 1
End If
Next
MsgBox errCount & "個のエラーを検出しました"
End Sub
IFERRORを一括で追加するVBA
Sub AddIFERROR()
Dim ws As Worksheet
Dim cell As Range
Set ws = ActiveSheet
For Each cell In ws.UsedRange
If InStr(UCase(cell.Formula), "VLOOKUP") > 0 Then
If Left(UCase(cell.Formula), 8) <> "=IFERROR" Then
cell.Formula = "=IFERROR(" & Mid(cell.Formula, 2) & ","""")"
End If
End If
Next
MsgBox "IFERRORを追加しました"
End Sub
実行方法: Alt+F11でVBEを開き、標準モジュールにコードを貼り付け、F5で実行します。
実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。
| A | B | C | E | F | ||
|---|---|---|---|---|---|---|
| 1 | 商品ID | 商品名 | 価格 | 検索値 | 結果 | |
| 2 | A001 | ノートPC | ¥89,800 | ← 選択 ノートPC #N/A #N/A #N/A #N/A | ||
| 3 | A002 | マウス | ¥2,980 | |||
| 4 | A003 | キーボード | ¥5,480 | |||
| 5 | A004 | モニター | ¥32,000 | |||
| 6 |
よくある質問(FAQ)
#N/Aは「検索値が見つからない」エラー、#REF!は「参照先が無効」エラーです。#REF!は列や行を削除した場合などに発生し、VLOOKUPの列番号が検索範囲の列数を超えている場合にも発生します。
IFERRORはエラーを隠してしまうため、データの不整合に気づきにくくなるリスクがあります。まずはエラーの原因を特定・修正し、どうしても消せないエラー(マスタデータに該当がないケース等)のみIFERRORで対処するのが安全です。
Microsoft 365のXLOOKUP関数は、検索値が見つからない場合のデフォルト値を第4引数で指定できるため、IFERRORを使わずに済みます。また、左側の列も参照できるなどVLOOKUPの多くの制約が解消されています。
LINEでExcelを気軽に学べる
