VLOOKUPが#N/Aになる原因8つと直し方|データがあるのに一致しない時の完全ガイド
VLOOKUP関数で #N/A エラーが出る——。しかも「データは確かにあるのに」一致しない。これはExcelで最もよくあるつまずきの一つです。
原因は1つではありません。型の違い・余分なスペース・先頭ゼロの欠落など、見た目では気づけない原因が複数あります。この記事では、原因を8パターンに整理し、それぞれの直し方を順番に解説します。さらに、多くの解説が抜かしがちな「先頭ゼロが消えたケース」や「検索値とマスタの両方を整える」という実務の勘所、最後に再発させないためのデータ設計まで踏み込みます。
まず知っておく:#N/Aは「見つからなかった」サイン
VLOOKUP #N/Aエラーの原因を診断するフローチャート#N/A は「該当データなし(No Applicable=NA)」の意味で、VLOOKUPが検索値を見つけられなかったときに出ます。つまり多くの場合、数式の書き方ではなく検索値とマスタ表のデータが微妙に噛み合っていないことが原因です。
VLOOKUPの構文はこちらです。
=VLOOKUP(検索値, 範囲, 列番号, 検索の型)
「データがあるのに#N/A」のときは、まず下の診断フローの順で疑うと早く特定できます。
- 検索値が範囲の左端列にあるか(→ 原因⑥)
- 検索値とマスタの型(文字列/数値)は同じか(→ 原因①)
- 余分なスペース・見えない文字はないか(→ 原因②)
- 全角・半角は揃っているか(→ 原因③)
- 先頭ゼロが消えていないか(→ 原因④)
- 数式コピーで範囲がずれていないか(→ 原因⑤)
- 第4引数がTRUE(近似一致)になっていないか(→ 原因⑦)
- 別シート・別ファイルの参照が切れていないか(→ 原因⑧)
原因①:文字列と数値の「型」が違う(最頻出)
いちばん多い原因です。見た目は同じ「123」でも、片方が数値・片方が文字列だと一致しません。社員番号・取引先コード・商品コードなど「番号形式のキー」で頻発します。
セルの左上に緑色の三角マークが出ていたら、文字列として保存された数値のサインです。また、数値は右寄せ・文字列は左寄せに表示されるので、寄り方でも見分けられます。
対処:どちらかに型を揃えます。検索値側だけ一時的に変換するなら次のとおりです。
文字列に揃える: =VLOOKUP(検索値&"", 範囲, 列番号, FALSE)
数値に揃える : =VLOOKUP(VALUE(検索値), 範囲, 列番号, FALSE)
恒久的に直すなら、マスタ側の列を選択して「区切り位置」で一括変換するのが確実です。
原因②:前後のスペース・見えない文字が混入している
CSV取込やコピペで、末尾の半角スペース・全角スペース・改行や制御文字が紛れ込むケースです。目視ではまず気づけません。=LEN(セル) で文字数を数えると、想定より多くて発覚することがよくあります。
対処:原因に応じて関数を使い分けます。
半角スペース除去 : =TRIM(検索値)
全角スペース除去 : =SUBSTITUTE(検索値," ","")
改行・制御文字除去: =CLEAN(検索値)
VLOOKUPに組み込むなら =VLOOKUP(TRIM(CLEAN(検索値)), 範囲, 列番号, FALSE) のように重ねられます。なおTRIMは半角スペースしか除去しません。全角スペースはSUBSTITUTEが必要、という点に注意してください。
原因③:全角・半角が揃っていない
「ABC123」(全角)と「ABC123」(半角)は別の文字列として扱われます。入力者や入力フォームによって揺れやすい、日本語環境特有の原因です。
半角に統一: =VLOOKUP(ASC(検索値), 範囲, 列番号, FALSE)
全角に統一: =VLOOKUP(JIS(検索値), 範囲, 列番号, FALSE)
原因④:先頭ゼロが消えている(要注意・他の方法では直らない)
実務で地味に多いのに、見落とされがちな原因です。本来「00123」だったコードが、CSVをExcelで開いた瞬間に数値化され「123」になってしまうケースです。
ここが重要なのですが、先頭ゼロが一度落ちると、`&””` で文字列化しても「123」のままで「00123」には戻りません。スペースや型違いの対処では直らない、別物の問題です。
対処:桁数が決まっているなら、TEXT関数でゼロ埋めして桁を揃えます。
5桁固定でゼロ埋め: =TEXT(検索値,"00000")
検索値とマスタの両方を同じ桁数で揃えれば一致します。桁数が不定の場合は、TEXTでは復元できないため、元データの作り直し(後述のデータ設計)が必要です。
原因⑤:数式をコピーすると範囲がずれる
数式を下方向にコピーすると #N/A が出始める場合、範囲を相対参照のまま指定しているのが原因です。コピーに合わせて範囲も下へずれ、本来のデータが範囲外になります。
対処:範囲を絶対参照で固定します(範囲を選んで F4 キー)。
誤: =VLOOKUP(A2, B2:D100, 2, FALSE)
正: =VLOOKUP(A2, $B$2:$D$100, 2, FALSE)
範囲をテーブルに変換して構造化参照にしたり、範囲に名前を付けたりすると、最初からずれを防げます。
原因⑥:検索値が「左端列」にない
VLOOKUPは範囲の一番左の列しか検索しません。検索したいキーが範囲の左端列より右にあると、正しい値を入れても見つかりません。
対処:範囲の左端列が検索キーの列になるよう取り直します。構造上どうしても左側を参照したいときは、左右どちらも検索できる関数に乗り換えます。
=INDEX(取り出したい列, MATCH(検索値, 検索する列, 0))
原因⑦:第4引数がTRUE(近似一致)になっている
第4引数を省略すると、自動的に TRUE(近似一致)として扱われます。近似一致は範囲が昇順に並んでいることが前提で、並んでいないと意図しない値や #N/A を返します。しかも近似一致は「エラーが出ないのに値が間違っている」という気づきにくい誤動作も起こします。
| 指定 | 意味 | 並べ替え | 使う場面 |
|---|---|---|---|
| FALSE / 0 | 完全一致 | 不要 | 通常はこちら |
| TRUE / 1 / 省略 | 近似一致 | 昇順が必須 | 段階評価など特殊な場合のみ |
対処:コードや名前を完全一致で探す一般的な使い方では、必ず最後に FALSE を付けると覚えておきましょう。
原因⑧:別シート・別ファイルの参照が切れている
別ファイルを参照しているVLOOKUPで、参照元ファイルが閉じている・パスが変わった・シート名をリネームした場合に起きます。
対処:参照元ファイルを開いた状態で再計算(Ctrl+Alt+F9)するか、数式バーでシート名・ファイルパスを修正します。長期運用するデータは、取得後に値として貼り付けてリンクを切っておくと安定します。
【実務の勘所】検索値とマスタの「両側」を整える
ありがちな失敗が、「検索値だけ整形して、マスタ側は手付かず」というケースです。片側だけ TRIM や ASC をかけても、相手側に全角文字や空白が残っていれば一致しません。
安定させるコツは、検索値側とマスタ側の両方に「整形済みキー列」を作り、その列同士で突合することです。例えば両方に =TEXT(TRIM(元コード),"00000") のような整形列を用意し、VLOOKUPはその列を使います。原因の切り分けもしやすくなります。
#N/Aを「見た目だけ」消すIFERROR(使い方と注意)
「該当データが無いのが正常」と分かっているときは、IFERROR関数でエラーを任意の表示に置き換えられます。
=IFERROR(VLOOKUP(検索値, 範囲, 列番号, FALSE), "該当なし")
ただし注意してください。IFERRORはエラーの見た目を隠すだけで、原因は解決しません。原因①〜④のような本当のミスが残ったまま空欄にしてしまうと、「本来一致するはずのデータが、気づかないうちに空欄扱い」になり、その後の集計が静かに狂う危険があります。まず原因を潰してから、消えないエラーだけにかぶせるのが安全です。
そもそも再発させない:コードは「文字列」で管理する
VLOOKUPの不一致は、式の問題であると同時にデータ設計の問題でもあります。社員番号や商品コードのような識別用コードは、見た目が数字でも計算する数ではなくラベルです。最初から文字列として管理しておくと、多くのトラブルを未然に防げます。
- 先頭ゼロ(00123)を保持できる
- 桁数固定コードを維持できる
- 将来、英字や記号が混ざっても拡張しやすい
- CSVを経由しても形が崩れにくい
CSVを取り込むときは、ダブルクリックで開かず、「データ」タブ →「テキストまたはCSVから」(Power Query)でキー列のデータ型を「テキスト」に指定すると、先頭ゼロ欠落の事故を防げます。
根本回避:XLOOKUPに乗り換える
Microsoft 365・Excel 2021以降なら、XLOOKUP関数がVLOOKUPの多くの弱点を解消します。
- 左右どちらの方向にも検索できる(原因⑥が起きない)
- 見つからないときの表示を第4引数で直接指定でき、IFERRORが不要
- 列番号ではなく列そのものを指定するため、列の挿入で壊れにくい
=XLOOKUP(検索値, 検索する範囲, 取り出す範囲, "該当なし")
まとめ:#N/Aは順番に潰せば必ず直る
「データがあるのに#N/A」の正体は、ほとんどが原因①の型違いか原因②のスペース、そして見落とされやすい原因④の先頭ゼロ欠落です。記事冒頭の診断フローを上から順にたどれば、原因はほぼ特定できます。
そして、応急処置を繰り返すより、コードを文字列で管理し、両側に整形済みキー列を用意する運用にすれば、同じ問題の再発を止められます。VLOOKUPそのものの使い方は VLOOKUP関数の使い方、エラー処理は IFERROR関数の使い方、より柔軟な検索は XLOOKUP や INDEX・MATCH も合わせてご覧ください。