ExcelのINDEX MATCH関数がうまくいかない原因と直し方|エラー別症状別で完全解決

スポンサーリンク
スポンサーリンク

VLOOKUPの限界を感じてINDEX MATCHに切り替えたものの、なぜかエラーが出てしまう——そんな経験はありませんか?

 

わたしも以前初めてINDEX MATCHを使ったとき、「#N/Aが消えない」と30分ほど悩んだことがあります。

 

結論からお伝えすると、INDEX MATCHがうまくいかない原因の大半は「MATCH関数の第3引数の省略」か「データ型の不一致」のどちらかです。

 

正しい構文と確認ポイントを押さえれば、ほとんどのエラーは数分で解消できるでしょう。

 

この記事では、よくある症状と原因を症状別に整理し、図解つきで直し方を解説します。

スポンサーリンク

INDEX MATCH関数の基本構文をおさらいしよう

エラーの原因を理解するには、まず2つの関数がそれぞれ何をしているかを把握しておく必要があります。

INDEX関数とMATCH関数、それぞれの役割

INDEX MATCHは、2つの独立した関数を組み合わせて使うテクニックです。

 

  • INDEX関数:指定した範囲の「〇行目・△列目」にある値を取り出す
  • MATCH関数:指定した範囲の中で「検索値が何番目にあるか」を数値で返す

 

MATCHが「行番号」を調べ、INDEXがその行番号をもとに値を取り出す——という連携がINDEX MATCHの仕組みです。

組み合わせた基本の書き方

実務で使う基本形は以下のとおりです。

 

=INDEX(取り出す範囲, MATCH(検索値, 検索する列, 0))

 

この数式の中で、最後の「0」が最大の落とし穴になります。詳しくは次のセクションで解説しましょう。

 

INDEX MATCH 関数の構造

数式の外側
INDEX関数
指定した行番号の値を
範囲から取り出す
数式の中身(引数の意味)
配列
値を取り出す範囲(例:$B$2:$B$100)
行番号
MATCHが返す「何番目か」の数値
MATCH
第3引数は必ず0(完全一致)を指定
↑ ここを省略するのが最大の落とし穴!
スポンサーリンク

#N/Aエラーの原因と直し方(INDEX MATCHで最も多いトラブル)

INDEX MATCHで最もよく遭遇するのが「#N/A(ノー・アサイン)」エラーです。

 

「データは絶対にある」と確信していても出てしまうことがあり、焦ってしまいやすい症状でしょう。原因は主に3つに絞られます。

原因① MATCHの第3引数(照合の種類)を省略している【最多原因】

MATCH関数の構文は =MATCH(検索値, 検索範囲, 照合の種類) の3引数構成です。第3引数には次の3種類があります。

 

指定値 検索方法 注意点
省略 or 1 近似一致(昇順) 省略時のデフォルト。意図しない結果になりやすい
0 完全一致 通常はこれを使う。見つからなければ#N/Aを返す
−1 近似一致(降順) 降順ソートが必須。特殊用途向け

 

VLOOKUPの第4引数(FALSEを省略するとTRUEになる)と同様に、MATCHの第3引数も省略すると近似一致(1)がデフォルトで適用されます

 

商品コードや社員番号など固有値を検索する実務では、この省略がそのままエラーや誤った値の原因になりやすいのです。

 

✅ 直し方:MATCH関数の第3引数に必ず 0 を追加してください。

❌ 誤:=INDEX($B$2:$B$100, MATCH(A2, $A$2:$A$100))
✅ 正:=INDEX($B$2:$B$100, MATCH(A2, $A$2:$A$100, 0))

原因② データ型の不一致(数値 vs 文字列)

見た目は同じ「1001」でも、Excelの内部では「数値の1001」と「文字列の1001」は別物として扱われます。

 

検索値が「数値」なのに検索範囲が「文字列として保存された数値」になっていると、完全に一致しないとして#N/Aが返ります。

 

確認方法:セルの左上に緑色の三角マークが表示されていれば、文字列として保存された数値です。

 

✅ 直し方:問題のセルを選択して横に表示される「」マーク → 「数値に変換する」をクリックします。数式で対応する場合、検索値が「数値」で範囲が「文字列」のときは検索値に &"" を付けて文字列化します。

逆に検索値が「文字列」で範囲が「数値」のときは VALUE() 関数や --(ダブルマイナス)を検索値の前につけて数値化します。

原因③ 余分なスペースや全角・半角の混在

システムから貼り付けたデータや、外部ファイルから取り込んだデータに特に多いのが、末尾の余分なスペースによる不一致です。

 

✅ 直し方:TRIM関数を使い、余分なスペースを取り除いてから検索しましょう。

=INDEX($B$2:$B$100, MATCH(TRIM(A2), $A$2:$A$100, 0))

 

全角・半角が混在している場合は ASC() 関数(全角→半角に変換)を組み合わせるとさらに確実です。

 

なお、#N/Aエラーをセルに表示させたくない場合は、IFERROR関数で囲む方法が有効です。ただし、エラーを隠す前に必ず根本原因を確認する順序を守ってください。→ Excelでエラーを消す!IFERROR関数の使い方と具体例【保存版】

スポンサーリンク

結果がズレる・おかしい値が返る原因と直し方

エラーは出ていないのに返ってくる値が1つずつズレている——

 

この症状は、INDEX配列とMATCH検査範囲の開始行番号がずれているときに起きます。静かに間違い続けるため、気づくのが遅れやすい厄介なトラブルです。

原因① INDEX配列とMATCH検査範囲の行番号がずれている

INDEX関数の「配列」と、MATCH関数の「検査範囲」は必ず同じ行から始める必要があります。

 


行番号ズレ:NG例 vs OK例
❌ ズレる例
=INDEX(A1:C7, MATCH(F2, A2:A7, 0), 2)
→ INDEXは1行目から、MATCHは2行目から
→ 行番号のズレで結果が1行ずれる
✅ 正しい例
=INDEX(A2:C7, MATCH(F2, A2:A7, 0), 2)
→ INDEXもMATCHも2行目から始める
→ 行番号が一致して正しい値が返る

💡

チェックのコツ
INDEXの配列とMATCHの検査範囲の行番号を見比べ、両方が同じ行から始まっているか確認してください。

原因② 絶対参照($記号)を忘れてコピーした

数式を下にコピーしたときに、すべての結果が1行ずつズレていく場合は絶対参照の書き忘れが原因です。

INDEXの配列とMATCHの検査範囲には、必ずF4キーで$を付けて固定しましょう。

 

❌ 誤:=INDEX(A2:C7, MATCH(F2, A2:A7, 0), 2)
✅ 正:=INDEX($A$2:$C$7, MATCH(F2, $A$2:$A$7, 0), 2)

 

検索値(F2の部分)は行ごとに変化させたいので$は付けず、範囲だけを固定するのがポイントです。

スポンサーリンク

その他のエラー(#VALUE! / #REF!)の直し方

#N/Aとは別に、INDEX MATCHで起きることのある2つのエラーについても整理しておきましょう。

どちらも原因が明確なため、一度仕組みを知れば迷わず対処できます。

#VALUE!エラー:複数条件で使うときのCtrl+Shift+Enterを確認

複数条件を持たせるために &(アンパサンド)で条件を連結する書き方では、バージョンによって入力方法が異なります。

 

  • Microsoft 365・Excel 2021以降:通常のEnterキーで確定できます(動的配列数式)
  • Excel 2019以前Ctrl+Shift+Enterで確定し、数式が { } で囲まれている必要があります

 

旧バージョンで { } が付いていない場合、#VALUE!エラーになります。数式を選択して Ctrl+Shift+Enter を押し直してみましょう。

 

関数エラーの種類と原因の詳細については、こちらの記事もあわせてご確認ください。→ Excel関数エラーの原因と直し方|#VALUE!・#REF!・#NAME?症状別逆引き

#REF!エラー:INDEX関数の列番号が配列の範囲外

=INDEX(A2:B7, MATCH(...), 3) のように、配列が2列しかないのに列番号を「3」と指定すると#REF!エラーになります。

 

✅ 直し方:INDEX関数の配列(第1引数)の列数と、指定している列番号が矛盾していないかを確認してください。配列が A列〜C列の3列なら、取り出せるのは列番号1・2・3のいずれかのみです。

スポンサーリンク

VLOOKUPとINDEX MATCHの違い|使い分けの判断基準

「VLOOKUPで間に合っているのに、なぜINDEX MATCHを覚える必要があるの?」という疑問はもっともです。しかし、実務でよく出くわす2つのシチュエーションで、VLOOKUPには構造的な限界があります。

VLOOKUPにできない「左方向検索」ができる

VLOOKUPは「検索キーが一番左の列にある」という制約があります。たとえば、商品コードがB列にあって、商品名をA列から取得したい場合、VLOOKUPでは対応できません。

 

INDEX MATCHには方向の制約がないため、左右どちらへも検索できます。

 

VLOOKUPのエラーや使い方については、こちらも参考にしてみてください。
VLOOKUPエラーの原因と直し方|症状別逆引きチェックリスト【2026】

列を挿入・削除してもズレない

VLOOKUPは取り出す列を「列番号(数値)」で指定するため、表の途中に列を追加すると参照先がズレます。

 

INDEX MATCHは「取り出す範囲そのもの」を指定するため、列の追加・削除に対してズレません。複数人で管理する大きな表では、この差が特に大きく出ます。

 

比較項目 VLOOKUP INDEX MATCH
検索の方向 ❌ 左端列のみ ✅ 左右どちらでも可
列の挿入・削除 ❌ 列番号がズレる ✅ 自動追随
255文字超えの検索値 ❌ 機能しない ❌ 機能しない(エラーになる)
数式の覚えやすさ ✅ 引数が少ない ❌ やや複雑
Excelバージョンの互換性 ✅ 全バージョン ✅ 全バージョン

 

なお、Microsoft 365をお使いであれば、INDEX MATCHの後継にあたるXLOOKUP関数がさらに使いやすい選択肢になります。→ XLOOKUPとVLOOKUPの違いを徹底比較|どっちを使えばいい?【2026】

スポンサーリンク

Q&A【よくある疑問まとめ】

Q. MATCH関数の第3引数を「0」にしたのに、まだ#N/Aが出ます。他に確認すべきことはありますか?
A. 第3引数を正しく指定しても#N/Aが続く場合は、データ型の不一致かスペースの混入が原因である可能性が高いです。まずは問題のセルの左上に緑色の三角マークが出ていないかを確認してください。出ている場合は文字列として保存された数値なので、セルを選択して横に出る「!」マークから「数値に変換する」を押すだけで解決することがほとんどです。スペースが疑われる場合は =MATCH(TRIM(A2), $A$2:$A$100, 0) のようにTRIM関数を使ってみてください。わたし自身もシステムからエクスポートしたCSVデータで、見えないスペースに30分気づかなかった経験があります。
Q. INDEX MATCHで複数条件の検索をしたいのですが、どう書けばいいですか?
A. 複数条件は検索値と検索範囲を & でつなぐことで実現できます。書き方は =INDEX(返す範囲, MATCH(条件1&条件2, 範囲1&範囲2, 0)) です。Microsoft 365・Excel 2021以降では通常のEnterで確定できますが、Excel 2019以前を使っている場合は Ctrl+Shift+Enter で配列数式として確定しないと#VALUE!エラーになります。確定後に数式バーの数式が { } で囲まれていれば正しく入力できた証拠です。手入力で { } を付けても動作しないので注意してください。
Q. VLOOKUPからINDEX MATCHに書き換えたら急に動かなくなりました。どこを確認すればいいですか?
A. 移行直後に特に多いのが「MATCH第3引数を書き忘れた」「INDEX配列とMATCH検査範囲の行番号がズレた」の2点です。まずMATCH関数の末尾に ,0) があるかを確認し、次にINDEXの配列(例: A2:C100)とMATCHの検査範囲(例: A2:A100)の先頭行が揃っているかを見てください。この2点を修正するだけで、移行直後のトラブルのほとんどは解消できます。また、数式が正しく動いていることを確認してからIFERROR関数でエラー処理を追加するのが安全な手順です。
スポンサーリンク

まとめ

INDEX MATCHがうまくいかないときの原因は、ほぼ以下のパターンに集約されます。

 

  • #N/Aエラー:MATCH第3引数の省略・データ型の不一致・スペース混入
  • 結果がズレる:INDEX配列とMATCH検査範囲の開始行のズレ・$記号の書き忘れ
  • #VALUE!エラー:複数条件の配列数式でCtrl+Shift+Enterを押していない(旧バージョン)
  • #REF!エラー:INDEXの列番号が配列の範囲外

 

特に「MATCHの第3引数は必ず0を書く」という1点を習慣化するだけで、大半のトラブルを防ぐことができます。

 

数式が完成したら、まずIFERRORなしで動作確認し、問題なければ最後にエラー処理を加えるという順番で進めると、デバッグが格段に楽になるでしょう。

 

数式そのものが正常に機能しているのに計算結果が更新されない場合は、計算方法の設定も確認してみてください。→ Excelの数式が反映されないときの直し方|手動計算・文字列・循環参照を解決

タイトルとURLをコピーしました