Excelで「VLOOKUP関数を入れたのに#N/Aって出る!」「データはあるはずなのに値が返ってこない!」と焦った経験、ありませんか?
VLOOKUPの#N/AエラーはExcelトラブルの中でもトップクラスに多い悩みです。しかも見た目ではわからない「隠れた原因」がほとんどで、何時間もハマってしまう人が続出しています。
この記事では、2026年4月時点の最新情報をもとに、VLOOKUPで#N/Aエラーが出る原因5つと具体的な直し方を初心者にもわかるように解説します。さらに、VLOOKUPの弱点を克服した後継関数XLOOKUPへの置き換え方法も紹介するので、「もうVLOOKUPで悩みたくない!」という方はぜひ最後まで読んでみてください。
そもそもVLOOKUPの#N/Aエラーって何?
#N/Aは「Not Available(該当なし)」の略で、ざっくり言うと「探したけど見つかりませんでした」というExcelからのメッセージです。
VLOOKUPは「指定した値を表の左端列から探して、同じ行の別の列の値を返す」という関数です。つまり#N/Aが出るということは、探し方か探す場所に何か問題があるということ。
ポイントは、データが実際に存在していても#N/Aになるケースがとても多いこと。「あるのになぜ!?」と混乱する原因はここにあります。
原因1:検索値と参照データの「データ型」が違う
これが一番多い原因です。見た目はどちらも「123」なのに、片方は数値、もう片方は文字列として入力されている場合、VLOOKUPは「別物」として扱います。
見分け方は簡単。セルを選択して、左揃えなら文字列、右揃えなら数値です。
直し方:
- 文字列→数値に変換したい場合:該当セルを選択→列の上に出る「!」マーク→「数値に変換する」をクリック
- または、空のセルに「1」を入力→コピー→対象セルを選択→「形式を選択して貼り付け」→「乗算」で一括変換できます
- 数式で対処するなら
=VLOOKUP(VALUE(A2), 範囲, 列番号, FALSE)のようにVALUE関数で数値に変換してから検索します
原因2:見えないスペースや改行が混入している
「絶対にデータはあるのに#N/Aになる!」という場合、目に見えない余分なスペースが混入している可能性が高いです。特にWebページやCSVファイルからコピペしたデータは要注意。
セルをダブルクリックして編集モードにすると、文字の前後にカーソルが余分に動くことがあります。これが隠れスペースのサインです。
直し方:
- TRIM関数で前後のスペースを除去:
=VLOOKUP(TRIM(A2), 範囲, 列番号, FALSE) - 改行が含まれる場合はCLEAN関数も併用:
=VLOOKUP(TRIM(CLEAN(A2)), 範囲, 列番号, FALSE) - 置換機能(Ctrl+H)で半角スペースや全角スペースを一括削除するのも効果的です
原因3:第4引数(検索方法)がTRUEまたは省略されている
VLOOKUPの第4引数は、FALSEなら完全一致、TRUEなら近似一致を意味します。問題は、この引数を省略するとTRUE(近似一致)がデフォルトになること。
近似一致の場合、検索範囲が昇順に並んでいないと正しい結果が返りません。並び替えされていない表で近似一致を使うと、#N/Aエラーや間違った値が返ってきます。
直し方:
- ほとんどのケースでは第4引数にFALSE(または0)を指定すればOK:
=VLOOKUP(A2, B:D, 3, FALSE) - 「完全に同じ値を探してほしい」なら、必ずFALSEを付けるのを習慣にしましょう
原因4:検索範囲をコピーしたらズレた(絶対参照の付け忘れ)
VLOOKUPを下のセルにコピーしたら、最初の行だけ正しくて2行目以降が#N/Aに......これは検索範囲が相対参照のままコピーされてズレたのが原因です。
直し方:
- 検索範囲に$(ドル記号)を付けて固定する:
=VLOOKUP(A2, $B$2:$D$100, 3, FALSE) - 範囲を選択した状態でF4キーを押すと、$記号が自動で付きます
- もっと楽にしたいなら、検索範囲をテーブル化(Ctrl+T)すると、自動的に絶対参照のように扱われます
原因5:検索値が検索範囲の「左端列」にない
VLOOKUPには「検索値は必ず範囲の一番左の列にないとダメ」というルールがあります。たとえば商品名で検索して左隣の商品コードを取得したい、というケースではVLOOKUPは使えません。
これはVLOOKUPの仕様上の制限で、エラーというより関数の限界です。
直し方:
- 列の並び順を入れ替える(表の構造を変える)
- INDEX関数+MATCH関数の組み合わせで代用する
- Microsoft 365 / Excel 2021以降なら、次のセクションで紹介するXLOOKUP関数を使うのがベストです
もうVLOOKUPで悩まない!XLOOKUP関数への置き換え方法
Microsoft 365またはExcel 2021以降をお使いなら、VLOOKUPの後継として登場したXLOOKUP関数への乗り換えを強くおすすめします。2026年4月現在、Microsoft公式でもXLOOKUPの利用が推奨されています。
XLOOKUPの基本構文:
=XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからない場合の値)
VLOOKUPとの大きな違いは次の3つです。
- 左方向の検索もOK:検索値が左端列にある必要なし。列の位置を気にせず使えます
- デフォルトが完全一致:第4引数を省略しても完全一致で検索されるので、FALSE付け忘れ事故がなくなります
- エラー時の表示を直接指定できる:第4引数に「該当なし」などの文字を入れれば、IFERRORを別途組む必要がありません
置き換えの例:
VLOOKUP:=VLOOKUP(A2, $B$2:$D$100, 3, FALSE)
XLOOKUP:=XLOOKUP(A2, B2:B100, D2:D100, "該当なし")
XLOOKUPは列番号を数えなくて済むので、列を追加・削除しても数式が壊れません。新しくファイルを作るなら、最初からXLOOKUPを使うのがおすすめです。
#N/Aエラーを表示させないIFERROR関数の使い方
「エラーの原因はわかったけど、データの不備は仕方ない。せめて#N/Aを見せたくない」という場合は、IFERROR関数で囲むのが定番です。
=IFERROR(VLOOKUP(A2, $B$2:$D$100, 3, FALSE), "該当なし")
これで、#N/Aが出るはずの場所に「該当なし」と表示されます。空欄にしたいなら "" を指定すればOK。
ただし注意点がひとつ。IFERRORは#N/A以外のエラー(#REF!や#VALUE!など)もまとめて非表示にしてしまうので、本来気づくべきエラーを見逃すリスクがあります。#N/Aだけを処理したい場合は =IFNA(VLOOKUP(...), "該当なし") を使いましょう。
FAQ
VLOOKUPで「あるはずのデータ」が#N/Aになるのはなぜ?
最も多い原因は「データ型の不一致」と「隠れスペースの混入」です。見た目が同じでも、数値と文字列では別物として扱われます。セルの配置(左揃え/右揃え)を確認し、TRIM関数で余分なスペースを除去してみてください。
VLOOKUPの第4引数は何を指定すればいい?
ほとんどの実務ではFALSE(完全一致)を指定してください。省略するとTRUE(近似一致)になり、意図しない値が返ったり#N/Aエラーになったりします。
XLOOKUPはどのバージョンのExcelで使える?
2026年4月時点で、Microsoft 365(サブスクリプション版)、Excel 2021以降、Excel for the web(無料のWeb版Excel)で利用可能です。買い切り版のExcel 2019以前では使えません。
VLOOKUPからXLOOKUPに一括で置き換える方法はある?
残念ながら自動置換の機能はありません。新規に数式を入力する場合はXLOOKUPを使い、既存ファイルは必要に応じて手動で書き換えるのが現実的です。
VLOOKUPで左側の列を取得する方法はある?
VLOOKUP単体では左方向の検索はできません。INDEX関数+MATCH関数を組み合わせるか、XLOOKUPを使えば左側の列も取得できます。
参考文献
- How to correct a #N/A error — Microsoft Support
- XLOOKUP関数 — Microsoft Support
- XLOOKUP関数とVLOOKUP関数を比較する。結局どっちが便利なの? — できるネット
- VLOOKUP/XLOOKUPで#N/Aエラーを表示させない方法(IFERROR関数) — moug






