Home / Microsoft / 【2026年最新版】ExcelのVLOOKUP関数がエラー・正しく機能しない原因と対処法【完全ガイド】

【2026年最新版】ExcelのVLOOKUP関数がエラー・正しく機能しない原因と対処法【完全ガイド】

※本ページにはプロモーション(広告)が含まれています

ExcelのVLOOKUP関数がエラーになって困っていませんか?

「VLOOKUP関数を使ったのに#N/Aエラーが出て正しい値が返ってこない」「数式は合っているはずなのに#VALUE!や#REF!が表示される」——Excelを日常的に使っているビジネスパーソンなら、一度はこうした壁にぶつかったことがあるでしょう。

VLOOKUP(ブイルックアップ)はExcelで最もよく使われる関数のひとつです。しかし、引数の指定方法や検索モードの設定を少し間違えるだけで、思い通りの結果が返ってこなくなります。エラーの種類によって原因が異なり、対処法も変わってくるため「なぜエラーが出るのかわからない」と悩む方は非常に多いです。

この記事では、VLOOKUPでよく発生するエラーの種類と原因を体系的に整理し、具体的な対処法を順番にわかりやすく解説します。初心者の方でも今日から実践できる内容です。さらに、Excel 365ユーザーに向けてVLOOKUPの後継関数「XLOOKUP」への移行方法もご紹介します。

この記事でわかること

  • VLOOKUPの基本構文と各引数の意味
  • #N/A・#REF!・#VALUE!など各エラーの原因と対処法
  • 絶対参照($マーク)が必要な理由と設定方法
  • 完全一致・近似一致の使い分けと落とし穴
  • よくある状況別トラブルシューティング
  • Excel 365ユーザー向けXLOOKUP移行のポイント

VLOOKUP関数とは?基本構文をおさらい

VLOOKUPは「Vertical Lookup(縦方向の検索)」の略です。指定した値を表の左端列から縦に検索し、同じ行の指定した列の値を返す関数です。

基本構文

=VLOOKUP(検索値, 検索範囲, 列番号, 検索方法)
引数 説明
検索値 探したい値またはセル参照 A2、”田中”
検索範囲 検索する表の範囲(左端が検索列) $B$2:$D$100
列番号 返す値が検索範囲の何列目か 2、3
検索方法 FALSE=完全一致、TRUE=近似一致 FALSE(推奨)

使用例

=VLOOKUP(A2,$B$2:$D$100,2,FALSE)

この式は「A2の値をB2:D100の左端列(B列)から検索し、一致した行の2列目(C列)の値を返す」という意味です。


VLOOKUPエラーの種類と原因一覧

VLOOKUPで発生するエラーは主に以下の4種類です。それぞれ原因が異なります。

エラー種類 主な原因 深刻度
#N/A 検索値が見つからない ★★★(最頻出)
#REF! 列番号が検索範囲を超えている ★★☆
#VALUE! 引数の型が不正・列番号が0以下 ★★☆
エラーなし・誤った値 近似一致・スペース・型の不一致 ★★★(見落としやすい)

#N/Aエラーの原因と対処法(最頻出)

#N/Aは「Not Available(データなし)」の意味で、検索値が検索範囲の左端列に存在しないときに表示されます。最もよく出るエラーです。

原因1: 検索値が実際には存在しない

単純に、検索している値が表の中に存在しない場合です。まず検索値を目視で確認しましょう。

対処法: IFERROR関数と組み合わせて、エラーの代わりに「未登録」や空白を表示する。

=IFERROR(VLOOKUP(A2,$B$2:$D$100,2,FALSE),"未登録")

原因2: スペース(空白)が混入している

検索値や検索範囲のデータに、見えない全角・半角スペースが含まれているケースは非常に多いです。「田中」と「田中 」(末尾スペースあり)は別のデータと認識されます。

確認方法: セルをクリックして数式バーで末尾・先頭のスペースを確認する。

対処法: TRIM関数でスペースを除去する。

=VLOOKUP(TRIM(A2),$B$2:$D$100,2,FALSE)

または検索範囲のデータ自体をTRIMで整理してから使用します。

原因3: 数値と文字列の型が一致していない

検索値が「数値の1234」で、検索範囲が「文字列の”1234″」だと一致しません(逆も同様)。数値のセルは右揃え、文字列のセルは左揃えになるのが目安です。

対処法A(文字列→数値に変換):

=VLOOKUP(VALUE(A2),$B$2:$D$100,2,FALSE)

対処法B(数値→文字列に変換):

=VLOOKUP(TEXT(A2,"0"),$B$2:$D$100,2,FALSE)

原因4: ワイルドカードの使い方が間違っている

部分一致で検索したいときに「*田中*」のようなワイルドカードを使う場合、検索方法をFALSE(完全一致)にしていても一部のワイルドカードは機能しますが、意図しない動作になることがあります。

対処法: ワイルドカードを使う場合は以下のようにアンパサンドで結合する。

=VLOOKUP("*"&A2&"*",$B$2:$D$100,2,FALSE)
検索値と検索範囲の確認手順

原因5: 検索範囲の左端列が検索キーになっていない

VLOOKUPは必ず検索範囲の一番左の列を検索列として使います。返したいデータが左側にある場合は検索できません。

例(NG): B列に名前、A列にIDがあるとき、名前でIDを検索しようとすると失敗します。

対処法: 表の列順を並べ替えるか、後述のINDEX+MATCH関数またはXLOOKUPを使用します。


#REF!エラーの原因と対処法

#REF!は「Reference Error(参照エラー)」の意味で、列番号が検索範囲の列数を超えているときに表示されます。

主な原因と確認手順

  1. 検索範囲が$B$2:$D$100(3列)なのに列番号に「4」以上を指定している
  2. 列番号に負の数や0を指定している(0を指定すると#VALUE!になる場合も)
  3. 検索範囲として参照しているシートが削除された

対処法

ステップ1: 数式の第3引数(列番号)を確認する。

=VLOOKUP(A2,$B$2:$D$100,4,FALSE)  ← B〜Dの3列しかないのに4を指定→#REF!
=VLOOKUP(A2,$B$2:$D$100,3,FALSE)  ← 3列目のD列が返る→OK

ステップ2: 検索範囲の列数を数える(終点列 − 始点列 + 1)。

ステップ3: 列番号がその範囲内に収まるように修正する。

注意点

検索範囲を広くしすぎると、列番号を変更したときに想定外の列を参照することがあります。列数が変わる可能性がある表には、MATCH関数と組み合わせて列番号を動的に取得する方法が有効です。


#VALUE!エラーの原因と対処法

#VALUE!は引数の値が不正な型・形式のときに表示されます。

主な原因

原因 具体例 対処法
列番号が0以下 ,0, または ,-1, 1以上の整数に修正
列番号に文字列を指定 ,"二", 数値(2など)に変更
検索値に配列を使用 検索値にセル範囲を指定 単一セル参照に変更
検索範囲が1列のみ 範囲が A2:A10 で列番号2 範囲を複数列に拡張

検索値と検索範囲の確認手順(画像付き)

エラーが出たとき、まず行うべき確認手順を整理します。

確認手順

  1. エラーが出ているセルをクリックし、数式バーで数式を確認する
  2. 第1引数(検索値)のセルをクリックし、実際の値を数式バーで確認(スペースがないか)
  3. 第2引数(検索範囲)を選択し、左端列に検索値と同じデータ形式・値が含まれているか確認
  4. 検索範囲の左端列のセルの書式(数値・文字列)を確認(右クリック→セルの書式設定)
  5. 第3引数(列番号)が検索範囲の列数以内かを確認
  6. 第4引数(検索方法)がFALSEになっているか確認
絶対参照を設定する手順

絶対参照($)を設定する理由と手順

VLOOKUPで最もよくある「数式をコピーしたら動かなくなった」問題の原因は、検索範囲に絶対参照($)を付け忘れたことです。

なぜ絶対参照が必要か

相対参照($なし)で数式をコピーすると、参照範囲が自動的にずれます。

【C2に入力】=VLOOKUP(A2,B2:D100,2,FALSE)
【C3にコピー後】=VLOOKUP(A3,B3:D101,2,FALSE) ← B3から始まってしまう!
【C4にコピー後】=VLOOKUP(A4,B4:D102,2,FALSE) ← さらにずれる!

これを防ぐには、検索範囲を絶対参照で固定します。

=VLOOKUP(A2,$B$2:$D$100,2,FALSE)  ← $を付けて固定

絶対参照を設定する手順

  1. 数式を入力中に、検索範囲(第2引数)を選択した状態でB2:D100の部分にカーソルを置く
  2. キーボードのF4キーを押す
  3. 自動的に$B$2:$D$100に変換される
  4. Enterで確定後、数式を下にコピーしても検索範囲がずれなくなる

F4キーの繰り返し押しで参照の種類が変わります

  • 1回目:$B$2:$D$100(行・列ともに絶対参照)← 通常はこれを使用
  • 2回目:B$2:D$100(行のみ絶対参照)
  • 3回目:$B2:$D100(列のみ絶対参照)
  • 4回目:B2:D100(相対参照に戻る)

よくある状況別トラブルシューティング

状況1:エラーは出ないのに間違った値が返ってくる

原因: 第4引数(検索方法)がTRUE(近似一致)になっている可能性が高いです。TRUEの場合、検索値が見つからなかった際に「より小さい最近似値」を返すため、一見正常に見えて実は別のデータが返ることがあります。

対処法: 第4引数を必ずFALSEに変更する。

=VLOOKUP(A2,$B$2:$D$100,2,TRUE)   ← 近似一致(危険)
=VLOOKUP(A2,$B$2:$D$100,2,FALSE)  ← 完全一致(推奨)

状況2:大文字・小文字の違いで一致しない

VLOOKUPは大文字・小文字を区別しません(Excelの仕様)。「ABC」と「abc」は同じ値として扱われます。大文字・小文字を区別したい場合はEXACT関数とINDEX+MATCHを組み合わせる必要があります。

=INDEX($C$2:$C$100,MATCH(TRUE,EXACT($B$2:$B$100,A2),0))
※Ctrl+Shift+Enterで配列数式として入力(365では不要)

状況3:別シートを参照しているときにエラーが出る

正しい参照形式:

=VLOOKUP(A2,Sheet2!$B$2:$D$100,2,FALSE)
=VLOOKUP(A2,'データ一覧'!$B$2:$D$100,2,FALSE)  ← シート名にスペースがある場合

シート名を直接入力せず、数式入力中に別シートをクリックして範囲選択すると自動的に正しい形式で入力されます。

状況4:数式のコピー後に列番号がずれてほしい(列を自動的に変えたい)

VLOOKUP関数を横方向にコピーして2列目・3列目と自動的に取得したい場合は、COLUMN関数を使います。

=VLOOKUP($A2,$B$2:$D$100,COLUMN(B1),FALSE)
↑ 右にコピーするとCOLUMN(B1)→COLUMN(C1)→COLUMN(D1)と列番号が増える

状況5:複数条件でVLOOKUPを使いたい

VLOOKUPは単一の検索値しか扱えません。「名前」と「日付」を両方満たす行を検索したい場合は、補助列を追加する方法が最も簡単です。

【補助列に】=A2&"_"&TEXT(B2,"YYYYMMDD")  ← 名前と日付を結合したキーを作成
【VLOOKUP】=VLOOKUP(A10&"_"&TEXT(B10,"YYYYMMDD"),補助列の範囲,n,FALSE)

詳細設定:完全一致と近似一致の使い分け

完全一致・近似一致の設定確認手順

完全一致(FALSE / 0)

検索値と完全に一致するデータのみを返します。通常はFALSEを指定します。

  • 一致するデータがない場合:#N/Aエラーを返す
  • 検索範囲の並び順は問わない
  • 名前・商品コード・IDを検索する場合はFALSEが必須

近似一致(TRUE / 1 または省略)

検索値以下で最大の値を返します。成績の評価区分や料金の段階分けなど、数値の範囲で対応する値を取得する場合に使います。

  • 検索範囲の左端列を昇順(小さい順)に並べる必要がある(必須)
  • 並び順が正しくないと誤った値が返る
  • 一致するデータがない場合:それ以下の最大値を返す(エラーにならない)

近似一致の使用例(評価テーブル)

点数テーブル(昇順必須):
0  → 不可
60 → 可
70 → 良
80 → 優
90 → 秀

=VLOOKUP(75,$F$2:$G$6,2,TRUE) → 「良」を返す(70以下の最大値)

XLOOKUPへの移行ガイド(Excel 365 / 2021以降)

Excel 365およびExcel 2021以降では、VLOOKUPの後継関数XLOOKUPが使用できます。XLOOKUPはVLOOKUPの多くの制限を解消した強力な関数です。

VLOOKUPとXLOOKUPの比較

機能 VLOOKUP XLOOKUP
左方向への検索 ❌ 不可 ✅ 可能
エラー時の代替値指定 IFERRORが必要 ✅ 第4引数で直接指定
完全一致がデフォルト ❌ 省略するとTRUE ✅ 省略すると完全一致
列追加への耐性 ❌ 列番号がずれる ✅ 返す列を直接指定
後方検索(下から) ❌ 不可 ✅ 可能
互換性(旧バージョン) ✅ 全バージョン対応 ❌ 365/2021以降のみ

XLOOKUPの基本構文

=XLOOKUP(検索値, 検索列, 返す列, [見つからない場合], [一致モード], [検索方向])

VLOOKUPをXLOOKUPに書き換える例

【VLOOKUP】
=IFERROR(VLOOKUP(A2,$B$2:$D$100,2,FALSE),"未登録")

【XLOOKUPで同じことを実現】
=XLOOKUP(A2,$B$2:$B$100,$C$2:$C$100,"未登録")

XLOOKUPでは検索列と返す列を別々に指定するため、列の追加・削除があっても数式が壊れません。また、IFERRORなしでエラー時の代替値を直接指定できます。

XLOOKUP左方向検索の例

【C列(名前)でA列(ID)を検索する場合(VLOOKUPでは不可能)】
=XLOOKUP(E2,$C$2:$C$100,$A$2:$A$100,"未登録")

INDEX+MATCH関数:VLOOKUPの代替手段

Excel 2019以前でも左方向の検索や複数条件に対応できる古くからの定番手法がINDEX+MATCHの組み合わせです。

基本的な使い方

=INDEX(返す列の範囲, MATCH(検索値, 検索列の範囲, 0))

【例】C列を検索してA列の値を返す(左方向検索)
=INDEX($A$2:$A$100, MATCH(E2,$C$2:$C$100,0))

MATCH関数の第3引数「0」は完全一致を意味します(VLOOKUPのFALSEに相当)。


🛒

この記事に関連するおすすめ商品

Microsoft 365 Personal(1年版)

約12,984円/年

ExcelはじめWord・PowerPointも使える。常に最新のXLOOKUP等の新機能が使用可能


🛒 Amazonで探す

Excel関数・数式 完全マスター本

約1,500円〜

VLOOKUP・XLOOKUP・INDEX+MATCHなど業務でよく使う関数を体系的に学べる一冊


🛒 Amazonで探す

外付けテンキー(Excel作業効率UP)

約2,000円〜

数値入力が多いExcel作業をスピードアップ。ノートPCユーザーにも便利なコンパクトテンキー


🛒 Amazonで探す

※ 価格は変動します。最新価格はリンク先でご確認ください


よくある質問(FAQ)

Q1. VLOOKUPで複数の結果を返すことはできますか?

通常のVLOOKUPは最初に一致した行の値しか返しません。複数の一致結果をすべて返したい場合は、Excel 365のFILTER関数を使うのが最も簡単です。古いバージョンでは補助列を使った方法が必要です。

Q2. VLOOKUPで検索範囲を列全体(A:A など)にしても問題ないですか?

技術的には動作しますが、列全体(例:B:D)を指定すると100万行以上を検索対象にするためExcelの動作が重くなる可能性があります。データのある範囲(例:$B$2:$D$1000)を明示的に指定するほうが安全です。

Q3. VLOOKUP関数は更新されますか?元データを変更したら自動で反映されますか?

はい、Excelは通常「自動計算」モードになっており、参照データが変わると数式は自動的に再計算されます。「数式」タブ→「計算方法の設定」が「自動」になっているかを確認してください。「手動」になっている場合はF9キーで手動更新できます。

Q4. VLOOKUP関数が遅い・Excelが重いのですがどうすれば改善できますか?

以下の方法で改善できることがあります。①検索範囲を列全体でなく実際のデータ範囲に絞る、②近似一致(TRUE)より完全一致(FALSE)のほうが一般的に高速、③大量データの場合はXLOOKUPへ移行する、④Excelの計算モードを「手動」にして必要なときだけF9で更新する。

Q5. 日本語(ひらがな・カタカナ)で検索するときに注意点はありますか?

VLOOKUPは全角・半角を区別します。「アイウ」と「アイウ」(半角カタカナ)は別のデータとして扱われます。データを統一するにはASC関数(全角→半角)やJIS関数(半角→全角)で変換してから使用するか、SUBSTITUTE関数で表記を統一します。

Q6. #N/Aエラーをまとめて空白にしたいのですが、一番簡単な方法は何ですか?

IFERROR関数でVLOOKUP全体を囲む方法が最もシンプルです。

=IFERROR(VLOOKUP(A2,$B$2:$D$100,2,FALSE),"")

第2引数に「””」を指定すると空白、「0」を指定すると0、「”未登録”」のように文字列も指定できます。

Q7. VLOOKUP関数でパーセント表示や日付が正しく検索できないのですが?

パーセント値・日付はExcel内部では数値として保存されています。検索値のセル書式と検索範囲の書式が異なると不一致になる場合があります。書式を統一するか、TEXT関数で文字列に変換してから比較することで解決できます。


まとめ

VLOOKUPのエラーは、原因さえわかれば多くの場合すぐに解決できます。本記事の要点を振り返りましょう。

VLOOKUPエラー対処のポイント

  • #N/A:スペース混入・型の不一致・検索値の存在確認。IFERRORで処理
  • #REF!:列番号が検索範囲の列数を超えていないか確認
  • #VALUE!:列番号が0以下でないか・引数の型を確認
  • 誤った値:第4引数をFALSE(完全一致)に設定する
  • コピー後にずれる:検索範囲に$(絶対参照)を付ける。F4キーで簡単設定
  • Excel 365ユーザー:XLOOKUP移行で制限を大幅に解消できる

VLOOKUPはExcelの中でも特に使用頻度が高い関数です。エラーが出たときに慌てず、この記事で紹介した手順に沿って一つひとつ確認することで、確実に解決できます。今後はXLOOKUPもぜひ活用してみてください。業務の効率化に大きく貢献するはずです。

Excelの他の関数やトラブルについても、当サイトでは多くの解決記事を掲載しています。ぜひ他の記事もあわせてご覧ください。

Check Also

ExcelのPower Queryが読み込めない対処法

【2026年最新版】ExcelのPower Query(データの取得と変換)が読み込めない・エラーになる原因と対処法【完全ガイド】

ExcelのGet & …