Excel で「VLOOKUP 関数を入れたのに #N/A って出る!」「データはあるはずなのに値が返ってこない!」と焦った経験、ありませんか?PC ショップ時代も「Excel が壊れた」と駆け込んでくる相談のかなりの割合がコレでした。
結論から言うと、VLOOKUP の #N/A は 「探したけど見つからなかった」 という Excel からのメッセージで、データ自体は存在していても出るケースが大半です。原因は5つに絞れて、見分けと直し方を覚えてしまえば 10 秒で解決します。
本記事では 2026年4月時点の Microsoft 365 / Excel 2021 以降を前提に、原因5つと、VLOOKUP 自体から卒業するための XLOOKUP への置き換え方 までまとめます。
そもそも VLOOKUP の #N/A エラーって何?
#N/A は「Not Available(該当なし)」の略で、ざっくり言うと 「探したけど見つかりませんでした」 という Excel からのメッセージです。
VLOOKUP は「指定した値を表の左端列から探して、同じ行の別列の値を返す」関数。つまり #N/A が出るということは、探し方か探す場所に何かしら問題がある ということです。
ポイントは、データが実際に存在していても #N/A になるケースが多い こと。「あるのになぜ!?」と混乱する原因はここにあります。
原因1:検索値と参照データの「データ型」が違う
これが 一番多い原因。見た目はどちらも「123」なのに、片方は 数値、もう片方は 文字列 として入力されている場合、VLOOKUP は別物として扱います。ショップ時代の Excel 相談、半分くらいはこれでした。
見分け方は簡単で、セルを選択して、左揃えなら文字列、右揃えなら数値 です。
直し方:
- 文字列 → 数値に変換したい場合:該当セルを選択 → 列の上に出る「!」マーク → 「数値に変換する」 をクリック
- または、空のセルに「1」を入力 → コピー → 対象セルを選択 → 「形式を選択して貼り付け」→「乗算」 で一括変換できます(自分はこっちが定番)
- 数式で対処するなら
=VLOOKUP(VALUE(A2), 範囲, 列番号, FALSE)のように VALUE 関数で数値に変換してから検索します
原因2:見えないスペースや改行が混入している
「絶対にデータはあるのに #N/A になる!」という場合、目に見えない余分なスペース が混入している可能性が高いです。とくに Web ページや CSV ファイルからコピペしたデータは要注意。
セルをダブルクリックして編集モードにすると、文字の前後にカーソルが余分に動くことがあります。これが隠れスペースのサインです。
直し方:
- TRIM 関数 で前後のスペースを除去:
=VLOOKUP(TRIM(A2), 範囲, 列番号, FALSE) - 改行が含まれる場合は CLEAN 関数 も併用:
=VLOOKUP(TRIM(CLEAN(A2)), 範囲, 列番号, FALSE) - 置換機能(Ctrl+H)で半角スペースや全角スペースを一括削除するのも効果的(CSV 取り込みの定番処理)
原因3:第4引数(検索方法)が TRUE または省略されている
VLOOKUP の第4引数は、FALSE なら完全一致、TRUE なら近似一致 を意味します。問題は、この引数を省略すると TRUE(近似一致)がデフォルト になること。
近似一致は検索範囲が昇順に並んでいないと正しい結果が返らない仕様で、並び替えされていない表で近似一致を使うと #N/A や間違った値が返ってきます(ショップ時代、これで苦しんでる人を何人も見ました)。
直し方:
- ほとんどのケースは 第4引数に FALSE(または 0) を指定すれば OK:
=VLOOKUP(A2, B:D, 3, FALSE) - 「完全に同じ値を探してほしい」なら、必ず FALSE を付ける のを習慣にしましょう(自分は VLOOKUP を書くときに 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 関数 への乗り換えを強く推奨します。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 を使うのが断然おすすめです(自分のメイン業務では VLOOKUP はもう書いてません)。
#N/A エラーを表示させない IFERROR 関数の使い方
「エラーの原因はわかったけど、データの不備は仕方ない。せめて #N/A を見せたくない」という場合は、IFERROR 関数 で囲むのが定番です。
=IFERROR(VLOOKUP(A2, $B$2:$D$100, 3, FALSE), "該当なし")
これで #N/A が出るはずの場所に「該当なし」と表示されます。空欄にしたいなら "" を指定すれば OK。
ただし注意点が1つ。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 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






