VLOOKUP関数で #N/A エラーが出る——。しかも「データは確かにあるのに」一致しない。これはExcelで最もよくあるつまずきの一つです。

原因は1つではありません。型の違い・余分なスペース・先頭ゼロの欠落など、見た目では気づけない原因が複数あります。この記事では、原因を8パターンに整理し、それぞれの直し方を順番に解説します。さらに、多くの解説が抜かしがちな「先頭ゼロが消えたケース」や「検索値とマスタの両方を整える」という実務の勘所、最後に再発させないためのデータ設計まで踏み込みます。

まず知っておく:#N/Aは「見つからなかった」サイン

VLOOKUP #N/Aエラーの原因を診断するフローチャートVLOOKUP #N/Aエラーの原因を診断するフローチャート

#N/A は「該当データなし(No Applicable=NA)」の意味で、VLOOKUPが検索値を見つけられなかったときに出ます。つまり多くの場合、数式の書き方ではなく検索値とマスタ表のデータが微妙に噛み合っていないことが原因です。

VLOOKUPの構文はこちらです。

=VLOOKUP(検索値, 範囲, 列番号, 検索の型)

「データがあるのに#N/A」のときは、まず下の診断フローの順で疑うと早く特定できます。

  1. 検索値が範囲の左端列にあるか(→ 原因⑥)
  2. 検索値とマスタの(文字列/数値)は同じか(→ 原因①)
  3. 余分なスペース・見えない文字はないか(→ 原因②)
  4. 全角・半角は揃っているか(→ 原因③)
  5. 先頭ゼロが消えていないか(→ 原因④)
  6. 数式コピーで範囲がずれていないか(→ 原因⑤)
  7. 第4引数がTRUE(近似一致)になっていないか(→ 原因⑦)
  8. 別シート・別ファイルの参照が切れていないか(→ 原因⑧)

原因①:文字列と数値の「型」が違う(最頻出)

いちばん多い原因です。見た目は同じ「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 や INDEXMATCH も合わせてご覧ください。

ABOUT ME
IT解決チャンネル編集部
ExcelやWord、Windows、Googleスプレッドシートなど、ビジネスで使うITツールの使い方を初心者にもわかりやすく解説しています。関数の使い方から実務で役立つ応用テクニックまで、画像付きでていねいに紹介。パソコン操作で困ったときの頼れる情報源を目指しています。