VLOOKUPで#N/Aが出る原因と対処法8選!値があるのにエラーになる理由
VLOOKUP関数で値があるのに#N/Aエラーが出たり違う値が返されたりしませんか?不要なスペースや文字列と数値の不一致、絶対参照の忘れなど、よくある8大原因と具体的な解決策をわかりやすく解説します。
著者 Ayoub Farid · · 6 分で読めます
表の中に探しているデータが確かにあるのに、VLOOKUP関数が #N/A エラーを返してしまう。これはExcelで最もよくあるトラブルのひとつですが、その原因のほとんどは次の8つのパターンのいずれかに当てはまります。順番にチェックしてみましょう。
1. 不要なスペース(空白文字)が入っている
末尾に半角スペースが入った「P-102 」と、通常の「P-102」は別のデータとして扱われます。外部システムからエクスポートしたデータなどによく見られる原因です。
確認方法: =LEN(A3) で文字数を調べると、目に見える文字数よりも多く表示されます。 解決策: TRIM関数でデータを整理するか、数式の中で不要な空白を取り除きます: =VLOOKUP(TRIM(F2),$A$2:$C$100,3,FALSE)
2. 数値が文字列として保存されている(またはその逆)
参照先の表では「1042」が文字列形式で保存されており、検索値のセルには数値形式の「1042」が入っているケースです。見た目は同じでも一致しません。
確認方法: 一方が左揃え、もう一方が右揃えになっているか、=ISTEXT(A2) がTRUEを返します。 解決策: 列の形式を変換する(「データ」タブ >「区切り位置」> そのまま「完了」をクリック)か、数式側でデータ型を合わせます。数値を文字列に合わせる場合は =VLOOKUP(F2&"",...)、文字列を数値に合わせる場合は =VLOOKUP(--F2,...) を使用します。
3. 検索対象の列が範囲の先頭(左端)にない
VLOOKUP関数は、指定したセル範囲(table_array)の先頭列(左端の列)しか検索できません。例えばID番号がB列にあるのにセル範囲をA列から指定していると、正しく検索できません。
解決策: 検索したい列が一番左になるようにセル範囲を指定し直すか、XLOOKUP関数やINDEX MATCH関数を使用します。
4. 下にコピー(オートフィル)した際に参照範囲がずれている
=VLOOKUP(F2,A2:C10,3,FALSE) をオートフィルで下にコピーしていくと、参照先が A3:C11、A4:C12… と下にずれてしまい、表の上のほうの行が範囲外になってしまいます。
解決策: 範囲を固定します: $A$2:$C$10。詳しくは絶対参照の解説をご覧ください。
5. 検索方法(第4引数)のFALSEが抜けている
第4引数を省略すると、VLOOKUPは近似一致(TRUE)で動作します。昇順に並べ替えられていない表では #N/A が返されたり、最悪の場合はエラーも出ずにまったく違う行のデータを取得してしまいます。
解決策: 完全一致で検索する場合は、必ず末尾に FALSE(または 0)を指定してください。
6. 列番号が範囲を超えている
「列番号(col_index_num)」に指定した範囲の列数より大きな数値を入力すると #REF! エラーになります。また、1未満の数値を指定すると #VALUE! エラーになります。
解決策: 列番号はシート全体の「A列」から数えるのではなく、指定したセル範囲の左端の列を「1」として数えてください。
7. そもそも検索値がデータの中に存在しない
単なる入力ミスや表記揺れ(例:「コカコーラ」と「コカ・コーラ」)、あるいは本当にリストの中に存在しないデータである場合です。
解決策: エラーを非表示にして見やすく整えます: =IFERROR(VLOOKUP(...),"Not found")。詳しくはIFERROR関数をご覧ください。
8. 表に列を挿入したことで列番号がずれた
数式内に「3」と直接数値を指定していた場合、あとから表の途中に列を挿入すると、目的とは異なる列の値を参照してしまいます。この場合エラー表示が出ないため、誤ったデータに気づきにくくなります。
解決策: 戻り値の列を直接セル参照できるXLOOKUP関数を使用するか、MATCH 関数を使って列番号を自動取得するようにします。
素早く原因を特定するトラブルシューティング手順
- 検索値と、表の中の一致するはずの値を隣同士のセルにコピーします。
=F2=A3と入力します。FALSEが返されたら、両者の内容が完全に一致していません。=LEN(F2)と=LEN(A3)を比較します。文字数が違えばスペースが含まれています。=ISNUMBER(F2)と=ISNUMBER(A3)を確認します。結果が一致しなければ、数値と文字列の型の違いが原因です。
よくある質問
値が存在するのにVLOOKUPが#N/Aを返すのはなぜですか?
見えない余分なスペースが含まれているか、検索値と表のデータの間で「数値」と「文字列」のデータ型が一致していないことがほとんどです。
VLOOKUPが違う値を返してくる原因は何ですか?
第4引数を省略したことで近似一致になっているか、指定した列番号が間違っていることが主な原因です。
VLOOKUPでエラーを表示させないようにするにはどうすればよいですか?
IFERROR関数で数式を囲みます: =IFERROR(VLOOKUP(...),"")
XLOOKUPを使えばこれらの問題は解決しますか?
列番号の指定ミスや「左端の列しか検索できない問題」、デフォルトでの近似一致によるトラブルは解消されます。ただし、不要なスペースの混入や数値・文字列の不一致は、XLOOKUPでも事前にデータのクリーニングが必要です。