VLOOKUPで#N/A・#REF!が出る原因と直し方|IFERROR・XLOOKUPも解説

VLOOKUPエラーの解決とXLOOKUPへの移行を解説するガイドのタイトル画像

こんにちは、SkillStack Lab運営者のスタックです。

「VLOOKUPで検索している値は確実にあるのに、なぜか#N/Aになる」「昨日まで使えていた表が突然#REF!になった」と困っていませんか。

結論から言うと、VLOOKUPのエラーは、表示されたエラーコードごとに原因を切り分けるとかなり早く解決できます。

#N/Aなら「検索値が存在するか・数値と文字列が混ざっていないか・余計な空白がないか」、#REF!なら「列番号と参照範囲が合っているか」を順番に確認するのが基本です。

さらに厄介なのが、エラーが表示されないのに間違った値を返すケースです。VLOOKUPの第4引数を省略すると近似一致になるため、実務ではここも必ず確認してください。

この記事では、VLOOKUPで起きやすい#N/A・#REF!・#VALUE!の原因と直し方、IFERROR・IFNAの使い分け、XLOOKUPやFILTERへ切り替えた方がよいケースまで順番に解説します。

先に結論
  • #N/A:検索値なし・型違い・余計な空白を確認する
  • #REF!:列番号が参照範囲を超えていないか確認する
  • #VALUE!:引数や検索値の状態を確認する
  • 値は出るが間違う:第4引数がTRUEになっていないか確認する
  • 該当なしだけ隠す:IFNAを検討する
  • 新しいExcel:XLOOKUPへの置き換えも検討する
VLOOKUPエラーの主な原因として検索値の不一致、データ型、余計な空白、列番号、近似一致を確認する図解
目次

VLOOKUPのエラーはコード別に原因を確認する

VLOOKUPが動かないときに、やみくもに数式を書き直す必要はありません。

まず表示されているエラーコードを確認してください。

症状 主な原因 最初に確認すること
#N/A 検索値が見つからない 値の有無・型・余計な空白
#REF! 無効な参照 参照範囲と列番号
#VALUE! 引数・データの問題 検索値や数式の指定
#NAME? 関数名・文字列指定の誤り スペルや引用符
エラーなしで誤った値 近似一致など 第4引数がFALSEか

特に注意したいのが、最後の「エラーが表示されないのに結果が間違っている」ケースです。

#N/Aなら異常に気づけますが、それらしい別の値が表示されると見逃しやすいため、業務データではこちらの方が危険な場合があります。

VLOOKUPで#N/Aが出る原因と直し方

#N/Aは、VLOOKUPが検索値に対応するデータを見つけられなかったときに表示される代表的なエラーです。

まずは、次の順番で確認してみてください。

  1. 検索値がマスタに本当に存在するか
  2. 完全一致のFALSEを指定しているか
  3. 数値と文字列が混在していないか
  4. 先頭・末尾に余計な空白がないか
  5. 全角・半角など表記が異なっていないか

検索値が本当に存在するか確認する

最初に確認したいのは、検索している値そのものです。

例えば次の式で社員番号「1001」を探しているとします。

=VLOOKUP(A2,$F$2:$H$100,3,FALSE)

A2の値がF列に存在しなければ、VLOOKUPは#N/Aを返します。

入力ミスだけでなく、検索範囲が1行ずれていたり、新しく追加したデータが参照範囲の外に出ていたりするケースもあります。

まず検索値をコピーし、検索対象列でCtrl+Fなどを使って実際に存在するか確認すると切り分けやすくなります。

数値と文字列の違いで#N/Aになる

「画面上では同じ値なのに一致しない」という場合は、データ型を疑います。

人間から見ると同じ「1001」でも、Excelでは数値の1001と文字列の「1001」を別の状態として扱うことがあります。

VLOOKUPで数値の1001と文字列の1001が一致せず#N/Aになる例

外部システムから取り込んだデータでは、社員番号や商品コードなどが文字列として保存されていることがあります。

セル左上に緑の三角形が表示され、「数値が文字列として保存されています」と警告されている場合もあります。

文字列を数値へ合わせる方法

検索値を数値へ変換して問題ないデータなら、VALUE関数などを利用できます。

=VLOOKUP(VALUE(A2),$F$2:$H$100,3,FALSE)

また、文字列の数字に対して「データ」→「区切り位置」→「完了」で数値へ変換できる場合もあります。

社員番号・商品コードは無理に数値化しない

「00123」のように先頭の0自体に意味があるコードを数値へ変換すると、「123」になってしまいます。その場合は数値側を文字列へ合わせるなど、データの意味を確認してから変換してください。

数値を文字列へ合わせる方法

検索先が文字列コードとして管理されているなら、検索値側を文字列に合わせる方法もあります。

=VLOOKUP(A2&"",$F$2:$H$100,3,FALSE)

大切なのは「どちらかを無理に数値へ変える」ことではなく、検索値と検索列でデータ型を統一することです。

余計なスペースや見えない文字を確認する

型も合っているのに#N/Aになる場合は、余計な空白や見えない文字を疑います。

例えば、画面ではどちらも「田中」と見えていても、一方が「田中+半角スペース」なら一致しません。

VLOOKUPで検索値の末尾に余計なスペースがあり#N/Aになる例

一般的な半角スペースなら、TRIM関数で先頭・末尾の余計なスペースを削除できます。

=TRIM(A2)

ただし、TRIMですべての見えない空白を除去できるわけではありません。

Webページなどからコピーしたデータには、通常の半角スペースとは異なるノーブレークスペースが含まれる場合があります。

その場合は、必要に応じてSUBSTITUTE・CLEAN・TRIMを組み合わせます。

=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))

毎月同じCSVを整形しているならPower Queryも検討

毎月TRIMや置換を繰り返しているなら、Excel関数でその都度修正するより、Power Queryでデータ整形の手順を固定した方が運用しやすい場合があります。

Power Queryの使い方を実務ベースで確認する

VLOOKUPで#REF!が出る原因と直し方

#REF!は、Excelが有効な参照先を確認できない場合に表示されるエラーです。

VLOOKUPでは特に、第3引数の「列番号」が参照範囲を超えていないか確認してください。

列番号が参照範囲を超えている

次の式を見てください。

=VLOOKUP(A2,$F$2:$H$100,4,FALSE)

参照範囲F:Hは3列しかありません。

それなのに4列目を返すよう指定しているため、#REF!になります。

この場合は、戻したい列に合わせて列番号を3以下へ修正するか、参照範囲自体を広げます。

列の削除や表構造の変更にも注意する

昨日まで正常だった数式が突然#REF!になった場合は、参照している行や列が削除されていないか確認してください。

VLOOKUPで列番号が参照範囲を超える#REF!と近似一致の注意点を示した図

特にVLOOKUPは「参照範囲の左から何列目」という数字で戻り列を指定します。

そのため、表の構造を頻繁に変更する運用では、数式の意味を理解していない人が列を追加・削除することでトラブルが起きやすくなります。

列番号の管理が負担になっているなら、後述するXLOOKUPを検討する価値があります。

VLOOKUPで値が間違うときはTRUEを確認する

VLOOKUPで特に注意したいのは、エラーが出る場合だけではありません。

数式は正常なのに、意図していない値が返っているケースがあります。

原因になりやすいのが、第4引数の省略です。

例えば次の式です。

=VLOOKUP(A2,$F$2:$H$100,3)

最後の引数を省略すると、VLOOKUPはTRUE、つまり近似一致として処理します。

社員番号、商品コード、取引先コードなど「同じ値だけを検索したい」用途なら、次のようにFALSEを明示してください。

=VLOOKUP(A2,$F$2:$H$100,3,FALSE)

近似一致そのものが間違った機能というわけではありません。料金表や等級表など、範囲に応じた値を返す用途では使えます。

ただし、近似一致では検索列の並び方も重要になるため、完全一致を想定している表ではFALSEを指定する方が安全です。

IFERRORとIFNAはエラーを直してから使う

VLOOKUPで該当データがない場合、#N/Aをそのまま表示したくないこともあります。

そのときによく使われるのがIFERRORです。

VLOOKUPの#N/AをIFERRORやIFNAで空白や該当なしへ置き換える考え方
目的数式例
すべてのエラーを空白にする=IFERROR(VLOOKUP(A2,$F$2:$H$100,3,FALSE),"")
すべてのエラーを0にする=IFERROR(VLOOKUP(A2,$F$2:$H$100,3,FALSE),0)
すべてのエラーを「確認」にする=IFERROR(VLOOKUP(A2,$F$2:$H$100,3,FALSE),"確認")
#N/Aだけ「未登録」にする=IFNA(VLOOKUP(A2,$F$2:$H$100,3,FALSE),"未登録")

IFERRORは#REF!まで隠してしまう

IFERRORは便利ですが、使い方には注意が必要です。

IFERRORは#N/Aだけでなく、#REF!や#VALUE!などさまざまなエラーをまとめて別の値へ置き換えます。

つまり、数式そのものが壊れているのに、画面上では空白になって気づけなくなる可能性があります。

先に原因を直して、最後にエラー表示を整える

数式を作っている途中からIFERRORで隠すのではなく、VLOOKUP単体で正しい結果になることを確認してから追加しましょう。

「見つからない」だけ処理するならIFNA

「マスタに存在しない場合だけ『未登録』と表示したい」という用途なら、IFNAも使えます。

=IFNA(VLOOKUP(A2,$F$2:$H$100,3,FALSE),"未登録")

これなら#N/Aは置き換えますが、#REF!など別の異常はそのまま表示されます。

業務上「未登録」と「数式の破損」を区別したい場合は、IFERRORより分かりやすい設計になることがあります。

VLOOKUPからXLOOKUPへ変えた方がよいケース

VLOOKUPを使い続けること自体が間違いというわけではありません。

既存ファイルが安定して動いており、古いExcelとの互換性も必要なら、そのまま残す判断もあります。

一方、Microsoft 365、Excel 2021、Excel 2024などXLOOKUPを利用できる環境なら、新しく作る検索式ではXLOOKUPを検討する価値があります。

VLOOKUPからXLOOKUPへ切り替える判断を示したイメージ

XLOOKUPは列番号を指定しない

VLOOKUPでは次のように「3列目」という列番号を指定します。

=VLOOKUP(A2,$F$2:$H$100,3,FALSE)

XLOOKUPでは、検索する列と返す列をそれぞれ直接指定します。

=XLOOKUP(A2,$F$2:$F$100,$H$2:$H$100,"該当なし")

「左端から何列目」という数字を管理しなくてよいため、検索列と戻り列の間に列を追加した場合などでも数式の意図を保ちやすくなります。

ただし、実際に数式が参照している列そのものを削除すれば参照エラーになる可能性はあります。

XLOOKUPは#REF!が絶対に起きない関数ではなく、VLOOKUP特有の「列番号ずれ」を避けやすい関数と理解してください。

VLOOKUPとXLOOKUPを列番号、完全一致、未検出時の処理、左右検索で比較した図

XLOOKUPは完全一致が初期設定

VLOOKUPでは第4引数を省略すると近似一致になります。

一方、XLOOKUPは既定で完全一致です。

また、検索する列より左側の値を返すこともできます。

そのため、社員番号・商品コード・取引先コードなどを正確に検索する日常業務では、数式をシンプルにしやすいのがメリットです。

Excel 2016・2019ではXLOOKUPを使えない

XLOOKUPへ置き換える前に、ファイルを使う人のExcel環境も確認してください。

Excel 2016・Excel 2019ではXLOOKUPを利用できません。

自分のPCでは動いても、古いExcelを使う取引先や他部署で開くと互換性の問題が出る可能性があります。

共有範囲まで確認してから置き換えましょう。

XLOOKUPで複数条件を検索する方法

「社員番号だけではなく、部署と氏名の2条件で検索したい」といったケースでは、XLOOKUPを複数条件で使う方法があります。

例えば、店舗と商品という2条件なら次のような式です。

=XLOOKUP(1,($A$2:$A$1000=$H$2)*($B$2:$B$1000=$I$2),$D$2:$D$1000,"該当なし")

3条件、最後に一致したデータ、テーブルを使った書き方などは別記事で詳しく解説しています。

\ 2条件・3条件まで詳しく確認 /

重複する複数件を返すならFILTERを使う

VLOOKUPや通常のXLOOKUPは、基本的に条件に一致した1件を返す検索に向いています。

例えば「田中さんの売上履歴を全部表示したい」のように、同じ条件に一致する複数行を一覧表示したい場合はFILTER関数が便利です。

=FILTER($A$2:$D$100,$B$2:$B$100=F2,"該当なし")

条件に合う行が複数あれば、結果が周囲のセルへ自動的に展開されます。

FILTER関数で条件に一致する複数行をスピル表示する例

「1件を探す」のか「該当データを全部取り出す」のかで、関数を使い分けましょう。

別ファイルのVLOOKUPが不安定ならPower Queryも比較

別ブックにあるマスタをVLOOKUPで参照することもできます。

ただし、毎月ファイル名や保存場所が変わる、大量のCSVを読み込む、複数ファイルを毎回結合するといった業務では、数式の参照管理が複雑になりやすくなります。

このような「毎月同じデータを取得・結合・整形する」仕事は、Power Queryの方が向いている場合があります。

Power QueryとVLOOKUPの使い分けを確認する

VLOOKUPエラーのよくある質問

VLOOKUPで値があるのに#N/Aになるのはなぜですか?

検索値と検索列のデータ型が異なる、先頭・末尾に余計なスペースがある、検索範囲に対象値が含まれていないなどの原因があります。まず検索値が実際に存在するか確認し、その後に型と空白を確認してください。

VLOOKUPの#REF!はどう直しますか?

第3引数の列番号が参照範囲の列数を超えていないか確認してください。また、数式が参照していた行や列を削除していないかも確認します。

VLOOKUPのFALSEは省略してもいいですか?

完全一致で検索したい場合は省略しない方が安全です。第4引数を省略するとTRUE、つまり近似一致として処理されます。

IFERRORとIFNAはどちらを使えばいいですか?

すべてのエラーをまとめて別表示にするならIFERROR、検索値が見つからない#N/Aだけを処理したいならIFNAが候補です。IFERRORは#REF!なども隠すため、数式が正常に動くことを確認してから使ってください。

VLOOKUPからXLOOKUPへ全部置き換えるべきですか?

既存のVLOOKUPが安定して動いているなら、すべて置き換える必要はありません。新規ファイルや列番号の変更が多い表ではXLOOKUPを検討するとよいでしょう。Excel 2016・2019との互換性が必要な場合はVLOOKUPを残す判断もあります。

同じ検索値に複数の結果がある場合はどうしますか?

一致する複数行をすべて表示したい場合はFILTER関数が向いています。1件だけ返したい場合はXLOOKUP、複数件ならFILTERという使い分けが分かりやすいです。

まとめ|VLOOKUPエラーは順番に切り分ける

VLOOKUPの#N/A、#REF!、型、空白、FALSE、XLOOKUPを順番に確認するチェックリスト

VLOOKUPでエラーが出たら、焦って数式全体を書き直す前に原因を順番に確認しましょう。

  • #N/Aなら検索値の存在を確認する
  • 数値と文字列の型をそろえる
  • TRIMなどで余計な空白を確認する
  • #REF!なら参照範囲と列番号を見る
  • 第4引数は完全一致ならFALSEを指定する
  • IFERRORで原因を隠す前に数式を直す
  • #N/Aだけ処理するならIFNAも検討する
  • 新規作成ならXLOOKUPも比較する
  • 複数件を返すならFILTERを使う

特に実務で注意したいのは、#N/Aのように目立つエラーより、近似一致によって「それらしい間違った値」が返ってしまうケースです。

まずは今使っているVLOOKUPの第4引数がFALSEになっているか、一度確認してみてください。

XLOOKUPまで使える環境なら、複数条件や逆方向検索も含めて次の記事で実践的な書き方を確認できます。

\ XLOOKUPを実務で使う /

Excelの関数仕様や利用できる機能はバージョンによって異なります。本記事は2026年8月16日時点のMicrosoft公式情報を確認して更新しています。


次は、仕事で使えるスキルをもう一段積み上げる

SkillStack Labでは、Excel・生成AI・自動化・オンライン学習を、実務で使うことを前提に解説しています。今の課題に近いテーマから次の記事へ進んでみてください。

生成AIを仕事で使いたい

ChatGPTなどを「触ったことがある」から、実際の仕事で使えるレベルへ進みたい方へ。

生成AIの勉強方法・学習順序を見る →

Excel作業を自動化したい

関数だけでは限界を感じてきたら、Power Query・VBA・Pythonなども含めて自動化を考えます。

Excel業務を自動化する方法を見る →

体系的にスキルを学びたい

Excel・VBA・Python・生成AIなどを、動画講座で効率よく学びたい方へ。

社会人向けUdemy講座の選び方を見る →

何から始めるか迷ったら、今の仕事で最も時間がかかっている作業や、身につけたいスキルに近いテーマから選んでください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次