本文へスキップ
totonoe
Excel整形

VLOOKUPの#N/A、犯人はほぼこの4つ──表記ゆれ・空白・型違い・範囲ズレ

VLOOKUPで出る#N/Aエラーの原因は、実はほぼ4パターンに絞り込めます。表記ゆれ・見えない空白や不可視文字・数値と文字列の型違い・検索範囲のズレを症状別に見分け、IFERRORで隠す前にやるべき原因の直し方を解説します。

VLOOKUPで「#N/A」が出た。見た目には検索値も表もちゃんとある。なのに「見つかりません」と言われる——この経験がある方は多いはずです。

#N/Aってどういう意味?」「同じような数式なのに、この行だけ#N/Aになるのはなぜ?

結論から言います。

VLOOKUPの#N/Aは、原因不明の呪いではありません。犯人はほぼこの4つに絞れます。①表記ゆれ、②見えない空白・不可視文字、③数値と文字列の型違い、④検索範囲のズレ。この記事では症状からどれが犯人かを見分け、IFERRORで隠す前にやるべき「原因を直す」手順を説明します。


犯人①:表記ゆれ──「同じに見えるけど違う」

VLOOKUPは完全一致でしか探しません。人間には同じに見えても、文字コードが1つでも違えば「該当なし」です。

  • 全角「A001」と半角「A001」
  • 「(株)」「株式会社」「㈱」の表記違い
  • 末尾の「様」「さん」の有無
  • カタカナの長音「ー」とハイフン「-」の混在

たとえば =VLOOKUP("A001",商品マスタ!A:B,2,FALSE) で、商品マスタ側が「A001」(全角)だと一致しません。見た目はほぼ同じなので、目で見比べても気づきにくいのが厄介なところです。

直し方:検索値と表側、両方の文字種をそろえます。手作業で1件ずつ見比べるより、半角全角を整える に列ごと貼り付けて一括変換したほうが速く、見落としもありません。


犯人②:見えない空白・不可視文字──セルの中の幽霊

いちばん厄介なのがこれです。セルを見ても何も見えないのに、一致しないというパターン。

  • 他システムからコピーしたデータの末尾に半角スペースが1つ紛れている
  • Web上のデータをコピーすると**ノーブレークスペース(NBSP)**が混ざる
  • CSVの先頭にBOMが付いていて、1文字目が見えないゴミになっている
  • セル内改行やゼロ幅スペースが検索値の途中に入っている

「A001」と「A001 」(末尾に半角スペース)は、人間には同一に見えますが、Excelにとっては別の文字列です。=LEN(A1) で文字数を数えてみると、表示上の文字数より多く出ることがあり、これが不可視文字が潜んでいるサインです。

直し方:TRIM関数はセル内の連続スペースは詰めてくれますが、NBSPやゼロ幅スペースまでは除去できないことがあります。確実に潰すには、疑わしい列を 不可視文字を取り除く に通してください。ゼロ幅スペース・BOM・NBSP・改行などをまとめて検出・除去できます。


犯人③:数値と文字列の型違い──「123」と「123」は別人

セルに入っている**見た目は同じ「123」**でも、片方が数値、片方が文字列だと一致しません。

  • 会員IDや郵便番号を、片方の表では「数値」、もう片方では「文字列(先頭ゼロ保持のため'付き)」で管理している
  • 他システムからのCSV取り込みで、数値のはずの列が文字列として読み込まれている
  • セル左揃え(文字列)と右揃え(数値)が表と検索値で食い違っている

見分け方は簡単です。セルの数字の配置を見てください。デフォルトで右揃えなら数値、左揃えなら文字列です(自分で揃えを変更していない前提)。この配置が検索値と表側で違っていたら、型違いを疑います。

直し方:型を強制的にそろえます。文字列を数値に変換するなら =VALUE(A1)、数値を文字列に変換するなら =TEXT(A1,"0") を使い、どちらかに統一してからVLOOKUPします。急場しのぎなら =VLOOKUP(A1&"",範囲,2,FALSE) のように &""を足して文字列化する手もあります。


犯人④:検索範囲のズレ──そもそも見ている場所が違う

数式自体は正しくても、参照している範囲がズレていると#N/Aになります。

  • 表をコピーしたときに参照範囲を絶対参照$で固定し忘れ、下にコピーするたびに範囲がずれていく
  • 検索範囲の1列目に検索値の列がない(VLOOKUPは検索範囲の一番左の列しか探せません)
  • 表に行を追加・削除したのに、範囲が古いままで新しい行が範囲外になっている
  • 別シート参照で、シート名が変わった・削除されたのに数式が更新されていない

特に多いのが「範囲の1列目に検索値がない」パターンです。=VLOOKUP(A1,商品マスタ!B:D,2,FALSE) としていて、実は検索したいコードは商品マスタのA列にある——これでは範囲の外を探しているのと同じで、永遠に見つかりません。

直し方:検索範囲は$B$2:$D$100のように絶対参照で固定し、検索したい値が範囲の一番左の列にあるかを必ず確認します。行の増減がある表なら、範囲をテーブル化するか、思い切って余裕を持たせた行数(B2:D10000など)にしておくと安全です。


IFERRORで隠す前に、原因を直す

=IFERROR(VLOOKUP(...),"該当なし") は便利ですが、これはエラーの表示を隠しているだけで、原因は消えていません。本来ヒットするはずのデータまで「該当なし」に埋もれてしまい、後から気づきにくくなります。

正しい順番は、①まずエラーのまま原因を4パターンから特定する→②データそのものを直す→③それでも仕様上#N/Aが出うる場合だけIFERRORで整える、です。順番を逆にすると、間違ったデータに気づけないまま集計を進めてしまう事故につながります。


ブラウザで安全に試すなら

自分の数式のどこで#N/Aが起きているか、実データを開かずに確認したいときは、VLOOKUPを整える で検索値・列番号・完全一致(FALSE)/近似一致(TRUE)を変えながら、表のどの行がヒットしているかをハイライトで確認できます。完成した数式はコピーしてそのままExcelに貼り付け可能です。

表記ゆれや不可視文字が疑わしい列は 半角全角を整える不可視文字を取り除く に通してから検索し直すと、犯人がどれだったのか切り分けやすくなります。いずれも入力データを外部に送信しない、ブラウザ内完結のツールです。

#N/Aは「バグ」ではなく「症状」です。4つの原因のどれかを順に疑っていけば、たいていの場合は数分で片づきます。

KOINOBORI ECOSYSTEM

私たちが運営するサイト