Excelでのデータ集計に欠かせないVLOOKUP関数。
とても便利ですが、「検索したい値が一番左の列にないと使えない…」「表に列を追加したら、数式が全部ずれてしまった…」そんな経験はありませんか?
実は、これらのVLOOKUPの「限界」は、INDEX関数とMATCH関数を組み合わせることで、すべて解決できます。
この記事では、INDEX MATCH関数の基本的な使い方から、多くの人がつまずく「うまくいかない原因」の解決法、そしてVLOOKUPとの決定的な違いまで、図解を交えて徹底的に解説します。
この記事を読めば、あなたのExcelスキルは間違いなく一段階レベルアップするでしょう。
なお、ここで解説する方法はGoogleスプレッドシートでも同様に活用できます。
INDEX MATCHとは?VLOOKUPを超える最強タッグ
INDEX MATCHとは、その名の通り「INDEX関数」と「MATCH関数」という2つの関数を組み合わせて使うテクニックのことです。
単体でも便利な関数ですが、組み合わせることでVLOOKUP関数を超える柔軟なデータ検索を実現します。
まずは、それぞれの関数の役割を理解するところから始めましょう。
INDEX関数とは? – 「表から指定した場所の値を取り出す」関数
INDEX関数は、指定した範囲の中から、「〇行目」と「〇列目」が交差する場所にある値を取り出す、シンプルな関数です。
構文: =INDEX(配列, 行番号, [列番号])
- 配列: 値を取り出したい表全体の範囲を指定します。
- 行番号: 配列の中で、何行目の値を取り出したいかを数値で指定します。
- 列番号: 配列の中で、何列目の値を取り出したいかを数値で指定します。(省略可能)

例えば、上の図のように範囲をデータ部分の A2:C5 に指定した場合、=INDEX(A2:C5, 2, 2) と入力すると、「A2からC5の範囲の、2行目かつ2列目」にある値、つまりセルB3の「みかん」を返してくれます。
MATCH関数とは? – 「範囲内でデータが“何番目にあるか”を探す」関数
MATCH関数は、指定した範囲の中から、探したい値が「何番目にあるか」を行番号または列番号で返す関数です。
構文: =MATCH(検査値, 検査範囲, [照合の型])
- 検査値: 探したい値や、その値が入っているセルを指定します。
- 検査範囲: 検査値を探す対象の、1行または1列のデータ部分を指定します。
- 照合の型: どのように探すかを指定します。0を入力すると、完全に一致する値だけを探します。実務ではほとんどの場合で0を使います。

例えば、=MATCH("みかん", B2:B5, 0) と入力すると、「B2からB5の範囲の中で、”みかん”は2番目にあります」という意味で 2 という数値を返します。
INDEX MATCH関数の基本的な使い方
それでは、実際にINDEX関数とMATCH関数を組み合わせてみましょう。
ここでは、以下の商品リストから「商品ID:A-002」の「価格」を求めるケースを考えます。

完成する数式は以下の形です。
=INDEX(価格のデータ範囲, MATCH(検索したい商品ID, 商品IDのデータ範囲, 0))
これをステップごとに組み立ててみましょう。
Step 1: MATCH関数で「A-002」が何行目にあるか探す
まず、検索キーである「A-002」が、商品IDのデータ範囲(A2:A5)の中で何番目にあるかを探します。
数式:=MATCH("A-002", A2:A5, 0)
結果:2
(「A-002」は範囲A2:A5の中で2番目にあります)

Step 2: INDEX関数で「2行目」の価格を取り出す
次に、INDEX関数を使って、価格のデータ範囲(C2:C5)の中から、Step1で求めた「2番目」の値を取り出します。
数式:=INDEX(C2:C5, 2)
結果:80

Step 3: 2つの数式を合体させる
最後に、Step2の数式の 2 の部分に、Step1のMATCH関数をそのまま入れ込みます。
完成形: =INDEX(C2:C5, MATCH("A-002", A2:A5, 0))

これで、「商品IDの範囲から”A-002″を探し出し、それが何番目かを取得し、その番号を使って価格の範囲から対応する値を取り出す」という一連の処理が自動でできるようになりました。
【最重要】INDEX MATCHが「うまくいかない」原因とエラー解決法
INDEX MATCHは非常に便利ですが、多くの人が「なぜかうまくいかない」「エラーが出る」とつまずきがちです。
しかし、原因はいくつかのパターンに限られています。
慌てずにチェックしていきましょう。
原因①:数式がずれる
数式をオートフィル(セルの右下の■をドラッグ)でコピーした際に、結果がずれたりエラーになったりする場合、その原因のほとんどは「絶対参照」のつけ忘れです。
- 絶対参照とは?
数式をコピーしてもセルの参照位置が動かないように固定する仕組みです。
セル番地の列や行の前に$マークを付けます(例:$A$2:$A$5)。
キーボードのF4キーを押すと簡単に切り替えができます。
【絶対参照がついていない場合】

【絶対参照がついている場合】

【ケーススタディ】=INDEX(C2:C5, MATCH(E2, A2:A5, 0)) という数式を下にコピーすると、参照範囲も一つずつ下にずれて C3:C6, A3:A6 となってしまいます。
正しくは、動かしたくない範囲を $ で固定します。=INDEX($C$2:$C$5, MATCH(E2, $A$2:$A$5, 0))
こうすれば、検索値の E2 は E3, E4 と動きますが、検索範囲と取得範囲はずれることなく正しく計算できます。
原因②:「#N/A」エラーが出る
#N/A (Not Available) エラーは、「検索した値が見つかりませんでした」という意味です。
以下の点を確認してください。
- チェックリスト
- 範囲のズレ:
INDEX関数とMATCH関数で指定した範囲の行数(または列数)が一致しているか確認しましょう。例えば、MATCH(A1, D2:D10, 0)と9行の範囲で探しているのに、INDEX(E2:E9, ...)のように8行の範囲から値を取り出そうとすると、正しく参照できずエラーの原因になります。 - 不要な空白: 検索値や検索対象のセルに、見た目ではわからないスペース(空白)が入っていませんか?
- 照合の型:
MATCH関数の3つ目の引数は 0 (完全一致)になっていますか? - データの型: 数字と文字列など、異なるデータ型で検索していませんか?(例: 123 と “123” は別物と判断されます)
- 範囲のズレ:
原因③:空白のはずが「0」になる
INDEX MATCHで参照した先のセルが空白だった場合、結果が空白ではなく 0 になってしまうことがあります。
これはExcelの仕様ですが、IF関数を組み合わせることで回避できます。
対処法:=IF(元のINDEX MATCHの数式="","",元のINDEX MATCHの数式)
元の数式が INDEX(C2:C5, MATCH(E2, A2:A5, 0)) であれば、=IF(INDEX(C2:C5, MATCH(E2, A2:A5, 0))="","",INDEX(C2:C5, MATCH(E2, A2:A5, 0)))
とすることで、もし結果が空白なら空白を、そうでなければ計算結果を表示できます。
その他:「#REF!」「#VALUE!」エラー
#REF!: 数式が参照していたセルや範囲を削除してしまった場合に表示されます。正しい範囲を指定し直しましょう。#VALUE!: 関数の引数が正しくない場合に表示されます。特に後述する「複数条件」で配列数式として正しく入力できていない場合などに発生します。
【完全比較】もう迷わない!VLOOKUPとINDEX MATCHの使い分け
「VLOOKUPで十分では?」と思うかもしれませんが、INDEX MATCHにはVLOOKUPにはない決定的なメリットがあります。
【比較表】 VLOOKUP vs INDEX MATCH
| 項目 | VLOOKUP関数 | INDEX MATCH関数 |
|---|---|---|
| 検索方向 | 左から右のみ | 自由(左右どちらでも可) |
| 列の挿入/削除 | 弱い(数式がずれる) | 強い(ずれない) |
| 処理速度 | 遅くなることがある | 高速な傾向 |
| 分かりやすさ | 直感的で簡単 | 慣れが必要 |
メリット①:検索方向が自由!(VLOOKUPでできない左側の値を取得できる)
VLOOKUPの最大の弱点は、検索値が必ず範囲の一番左の列になければならない点です。
一方、INDEX MATCHは検索範囲と取得範囲を別々に指定するため、検索値より左側にある列の値も簡単に取得できます。
【VLOOKUPの場合】

【INDEX MATCHの場合】

メリット②:列の挿入・削除に強い!
VLOOKUPでは「左から何列目」と列番号を数値で指定します。そのため、表の構成を変えて列を挿入・削除すると、この列番号がずれてしまい、数式の修正が必要になります。INDEX MATCHは「この範囲から取得する」と列そのものを指定するため、表の構成が変わっても数式は壊れません。メンテナンス性に非常に優れています。
メリット③:動作が軽い!
データ量が数万行にも及ぶような大きな表の場合、VLOOKUPは処理が重くなることがあります。一方、INDEX MATCHは必要な列だけを参照するため、動作が比較的軽い(高速である)と言われています。
より詳しいVLOOKUP関数の使い方は、こちらの記事も参考にしてください。
【応用】INDEX MATCHで「複数条件」に一致するデータを抽出する方法
実務では、「支店名」と「商品名」の2つが一致する売上を探すなど、複数の条件でデータを検索したい場面がよくあります。これもINDEX MATCHなら可能です。

数式:=INDEX(取得したい範囲, MATCH(1, (条件範囲1=条件1)*(条件範囲2=条件2), 0))
【実例】=INDEX(C2:C7, MATCH(1, (A2:A7="大阪支店")*(B2:B7="商品A"), 0))
【数式のポイント】
(A2:A7="大阪支店")のように、条件範囲と条件を=で結び、()で囲みます。- 各条件を * (アスタリスク)で掛け合わせます。Excelでは、条件に一致するとTRUE(1)、一致しないとFALSE(0)を返すため、全ての条件に一致した場合にのみ
1*1=1となります。 MATCH関数でその 1 を探すことで、全ての条件を満たす行が何番目かを見つけ出しています。
複数条件での検索については、こちらの記事でさらに詳しく解説しています。
【補足】新世代の関数「XLOOKUP」も知っておこう
Excel 365やExcel 2021以降では、「XLOOKUP関数」という新しい関数が使えます。これは、INDEX MATCHの機能とVLOOKUPの分かりやすさを両立したような非常に便利な関数です。
=XLOOKUP(検索値, 検索範囲, 戻り範囲)
INDEX MATCHで行っていたことが、たった1つの関数で、よりシンプルに書けるようになります。
ただし、XLOOKUPは新しいバージョンのExcelでしか使えません。ファイルを共有する相手が古いExcelを使っている場合、エラーになってしまいます。そのため、互換性を考慮すると、INDEX MATCHを覚えておく価値は依然として非常に高いと言えるでしょう。
XLOOKUP関数の詳細はこちらの記事で解説しています。
よくある質問(FAQ)
- Qこの関数はGoogleスプレッドシートでも使えますか?
- A
はい、使えます。この記事で紹介している数式やテクニックは、Excelと全く同じようにGoogleスプレッドシートでも機能します。
- Q絶対参照($)の付け方がよくわかりません。
- A
絶対参照とは、数式をオートフィルなどでコピーしたときに、特定のセル参照がずれないように「固定」する機能です。
INDEXMATCH関数では、検索範囲や取得範囲がコピーによってずれてしまうと正しい結果が得られません。そのため、これらの範囲は絶対参照で固定する必要があります。設定は簡単です。数式バーで固定したいセル番地(例:
A2:A5)を選択した状態で、キーボードのF4キーを押します。F4キーを押すたびに、参照の種類が以下の順番で切り替わります。
A1(相対参照:コピーすると行も列もずれる)$A$1(絶対参照:行も列も固定される)A$1(複合参照:行だけ固定される)$A1(複合参照:列だけ固定される)
今回のケースでは、範囲全体を固定する
$A$2:$A$5のような絶対参照を使います。【ポイント】ノートパソコンをお使いの場合、Fnキーを押しながらF4キーを押す必要があることもあります。
- QINDEX MATCHは本当にVLOOKUPより処理が速い(軽い)のですか?
- A
データ量が非常に多い場合、必要な列だけを参照する
INDEXMATCHの方が高速に動作する傾向があります。
日常的なデータ量では体感できるほどの差はありませんが、大規模なデータを扱う際にはINDEXMATCHが有利です。
- Q検索範囲に同じデータが複数ある場合はどうなりますか?
- A
MATCH関数は、最初に見つかったデータが何番目にあるかしか返しません。そのため、検索範囲の上から見て、一番最初にヒットしたデータが抽出されます。
- Q
XLOOKUPが使えるなら、もうINDEXMATCHは覚えなくてもいいですか? - A
ファイルを共有する相手が古いバージョンのExcelを使っている可能性も考慮すると、
INDEXMATCHを覚えておく価値は非常に高いです。
両方使える状態が理想と言えるでしょう。
まとめ
今回は、VLOOKUPの限界を突破するINDEX MATCH関数について、徹底的に解説しました。
INDEXMATCHは、INDEX(取り出す)とMATCH(探す)の組み合わせVLOOKUPと違い、検索方向が自由で、列の挿入にも強い- 「うまくいかない」ときは、絶対参照、範囲のズレ、空白などをチェック
- 複数条件や、新しい
XLOOKUP関数との使い分けも重要
最初は少し複雑に感じるかもしれませんが、「うまくいかない」を乗り越えてこの関数をマスターすれば、あなたのExcel業務は格段に効率化され、データ活用の幅も大きく広がります。
ぜひ、実際の業務で活用してみてください。






