Excel中級者

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

しんたろ。

VLOOKUPの#N/Aエラー、正しいデータがあるのになぜ?原因7つと対処法を解説します!

この記事でわかること
  • VLOOKUPで#N/Aエラーが出る代表的な原因7パターン
  • 各原因の具体的な解決方法(TRIM / VALUE / 絶対参照等)
  • IFERRORで#N/Aエラーを非表示にする方法
  • VBAでVLOOKUPエラーを一括チェック・修正する方法
目次
💻 #N/Aエラーを実際に体験してみよう!

E列の検索値をクリックすると、VLOOKUPの結果がリアルタイムで変わります。エラーの原因も体験できます。

X
VLOOKUP エラー体験.xlsx
F2F2F3F4F5
← E列の検索値をクリックして選択=VLOOKUP(E2,A:C,2,FALSE) → ノートPC=VLOOKUP(E3,A:C,2,FALSE) → #N/A ※スペース混入=VLOOKUP(E4,A:C,2,FALSE) → #N/A ※型不一致=VLOOKUP(E5,A:C,2,FALSE) → #N/A ※該当なし
ABCDEF
1商品ID商品名価格テスト検索値結果
2A001ノートPC¥89,800← 選択ノートPC
3_A001マウス¥2,980#N/A
4A002キーボード¥5,480#N/A
5A003モニター¥32,000#N/A
61001マウスパッド¥1,200
正常に取得できました
検索値「A001」がA列に見つかり、B列の「ノートPC」を返しました。これがVLOOKUPの正常動作です。
原因1: スペース混入
A001」と「A001」は別の文字列です。見た目は同じでも先頭にスペースがあると不一致に。
対処法: =VLOOKUP(TRIM(E2),A:C,2,FALSE) でTRIM関数を使ってスペースを除去
原因3: 数値と文字列の型不一致
A列の「1001」は数値、E列の「’1001」は文字列。見た目が同じでも型が違うと不一致に。
対処法: =VLOOKUP(VALUE(E2),A:C,2,FALSE) でVALUE関数を使って数値に変換
原因: 検索値が存在しない
「B999」はA列に存在しないため、VLOOKUPは該当する値を見つけられません。
対処法: =IFERROR(VLOOKUP(E2,A:C,2,FALSE),"") でエラー時に空白を表示
▶ E列の検索値をクリックして、#N/Aエラーの原因を体験しよう!正常ケースと3つのエラーパターン(スペース混入・型不一致・該当なし)を確認できます。
このエラーチェック、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
▼ 下のデモで実行結果を確認できます
📊 売上管理.xlsx – Excelシート1
ABCD
1商品ID商品名在庫数VLOOKUP結果
2A001ノートPC15ノートPC
3A002マウス230#N/A 🔴
4A003キーボード87キーボード
5A004モニター5#N/A 🔴
6A005マウスパッド42マウスパッド
7A006ヘッドセット0#N/A 🔴
準備完了エラー: 3個 / 正常: 3個100%
3個の#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)

別ファイルを参照している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で実行します。

💻 操作を体験してみよう!

実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。

X
VLOOKUP エラー診断.xlsx
F2
← E列の検索値をクリック =VLOOKUP(“A001”,A:C,2,FALSE) → ノートPC =VLOOKUP(“A001 “,A:C,2,FALSE) → #N/A =VLOOKUP(“1001”,A:C,2,FALSE) → #N/A =VLOOKUP(“A001”,A:C,2,FALSE) → #N/A =VLOOKUP(“Z999”,A:C,2,FALSE) → #N/A
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
正常取得 — 「A001」がA列と完全一致し、B列の「ノートPC」を返しました。
スペース混入 — 「A001 」の末尾にスペースがあるため、「A001」と一致しません。対処 =VLOOKUP(TRIM(E2),A:C,2,FALSE)
型不一致 — A列は文字列「A001」、検索値は数値「1001」。型が違うと一致しません。対処 =VLOOKUP(TEXT(E2,”0″),A:C,2,FALSE)
全角・半角不一致 — A列は半角「A001」、検索値は全角「A001」。見た目は同じでも別文字です。対処 =VLOOKUP(ASC(E2),A:C,2,FALSE)
存在しない値 — 「Z999」はA列に存在しないため、#N/Aエラーになります。対処 =IFERROR(VLOOKUP(E2,A:C,2,FALSE),””)
▶ E列の検索値をクリックしてエラーを体験! ✅正常ケースと❌4種類のエラー原因(スペース・型不一致・全角・未登録)を確認できます。
1 #N/Aエラーが出たら、まず検索値を確認
2 スペースや全角/半角の違いをチェック
3 TRIM・ASC・VALUE等でデータをクリーニング
4 IFERRORでエラーを非表示にする

よくある質問(FAQ)

Q. #N/Aと#REF!の違いは?

#N/Aは「検索値が見つからない」エラー、#REF!は「参照先が無効」エラーです。#REF!は列や行を削除した場合などに発生し、VLOOKUPの列番号が検索範囲の列数を超えている場合にも発生します。

Q. IFERRORを使うとデータがなくてもエラーが出なくなる。それは安全?

IFERRORはエラーを隠してしまうため、データの不整合に気づきにくくなるリスクがあります。まずはエラーの原因を特定・修正し、どうしても消せないエラー(マスタデータに該当がないケース等)のみIFERRORで対処するのが安全です。

Q. VLOOKUP以外でエラーが出にくい関数は?

Microsoft 365のXLOOKUP関数は、検索値が見つからない場合のデフォルト値を第4引数で指定できるため、IFERRORを使わずに済みます。また、左側の列も参照できるなどVLOOKUPの多くの制約が解消されています。

Excel業務を自動化しませんか?

VBAマクロやGASでの業務改善、Webアプリへの移行まで対応します。

無料相談はこちら
期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました