VLOOKUPの限界突破!Excel INDEX MATCHでデータ検索を自在に操る究極の組み合わせ
日々の業務でExcelを使ったデータ検索に時間を費やしていませんか? 特にVLOOKUP関数で「検索値より左側のデータが参照できない」といった壁にぶつかった経験のある方もいらっしゃるでしょう。そんな時こそ、ExcelのINDEX関数とMATCH関数を組み合わせることで、これまでのデータ検索の制約を打ち破り、作業時間を大幅に短縮し、より柔軟なデータハンドリングが可能になります。
INDEX MATCHとは? VLOOKUPとの違い
Excelでのデータ検索といえば、VLOOKUP関数が広く使われていますが、いくつかの制約があります。
- 検索列が常に左端である必要がある: 検索値が、取得したいデータよりも右側の列にある場合、VLOOKUPでは直接対応できません。
- 参照する列番号が固定: データ構成に変更(列の追加・削除)があると、数式を修正する手間が発生します。

INDEX関数とMATCH関数の組み合わせは、これらのVLOOKUPの弱点を完全に克服します。MATCH関数で検索値の位置(行番号)を特定し、その行番号をINDEX関数に渡すことで、指定した任意の列からデータを抽出できる、非常に柔軟性の高い検索手法です。
INDEX MATCHの基本を理解する
まずは、INDEX関数とMATCH関数、それぞれの機能と使い方を単体で理解しましょう。
INDEX関数の使い方
INDEX関数は、指定した範囲の中から、指定した行番号(と列番号)に位置するセルの値を返す関数です。
=INDEX(範囲, 行番号, [列番号])
- 範囲: 値を取り出したいセル範囲を指定します。
- 行番号: 範囲内で、何番目の行の値を抽出したいかを指定します。
- [列番号]: 範囲内で、何番目の列の値を抽出したいかを指定します。(省略可能。範囲が1列の場合は省略できます。)
例: A1:A10の範囲で、3行目の値を取り出す場合 → =INDEX(A1:A10, 3)
MATCH関数の使い方
MATCH関数は、指定した範囲の中から、特定の検索値が何番目に位置するか(行番号または列番号)を返す関数です。
=MATCH(検索値, 検索範囲, [照合の種類])
- 検索値: 検索したい値を指定します。
- 検索範囲: 検索値がどこにあるかを探す範囲(1行または1列)を指定します。
- [照合の種類]: 実務ではほとんどの場合、検索値と完全に一致するものを探す「
0(完全一致)」を使用します。
例: A1:A10の範囲で「りんご」が何番目にあるかを探す場合 → =MATCH("りんご", A1:A10, 0)
INDEX MATCHの組み合わせで実現する高度な検索
これら二つの関数を組み合わせることで、MATCH関数がINDEX関数に「何行目のデータを取ればいいか」を正確に教えてくれる形になります。これにより、VLOOKUPでは不可能だった「検索値が参照したいデータの右側にある」ケースにも対応できる、汎用性の高い検索が実現します。
=INDEX(データを取り出したい列範囲, MATCH(検索値, 検索値がある列範囲, 0))
この数式は、まずMATCH関数が実行され、検索値が検索範囲の何番目にあるかを数値で返します。その数値(行番号)をINDEX関数が受け取り、指定されたデータ範囲のその行にある値を抽出します。
具体的な実務例で学ぶINDEX MATCH
それでは、実務でよくある「商品管理データ」を例に、VLOOKUPでは難しいデータ検索をINDEX MATCHで実現する手順を見ていきましょう。
以下のExcelシートに商品データがあるとします。
| A列 商品ID | B列 商品名 | C列 単価 | D列 在庫数 |
|---|---|---|---|
| 1001 | りんご | 150 | 50 |
| 1002 | みかん | 120 | 80 |
| 1003 | バナナ | 100 | 120 |
| 1004 | ぶどう | 300 | 30 |
| 1005 | いちご | 250 | 60 |

ここで、例えば「単価(C列)」から「商品名(B列)」を検索したいとします。VLOOKUPでは検索値(単価)が取得したいデータ(商品名)の右側にあるため、直接検索することはできません。
検索したい単価をG2セルに入力し、H2セルに商品名を表示させたい場合、以下の数式を使用します。
=INDEX(B:B, MATCH(G2, C:C, 0))

この数式の処理は以下の通りです。
MATCH(G2, C:C, 0):G2セルに入力された単価 (例:100) が、C列全体(C:C)のどこにあるかを検索します。この場合、100はC列の4行目(実際のデータ範囲では3番目)にありますので、結果は4を返します。INDEX(B:B, 4):B列全体(B:B)の中から、4番目の値を取り出します。この場合、B列の4番目は「バナナ」ですので、結果は「バナナ」となります。
このように、INDEX MATCHは検索対象列と取得対象列の位置関係に縛られず、柔軟にデータを取り出すことができます。
INDEX MATCHを使う上での注意点
注意点・補足
- MATCH関数の「照合の種類」: ほとんどの場合、完全一致を意味する「
0」を使用します。これを省略したり間違った数値を指定すると、意図しない結果になることがありますので、必ず「0」を指定するようにしましょう。 - エラー処理を組み合わせる:
MATCH関数で検索値が見つからない場合、#N/Aエラーが表示されます。これを回避するには、IFERROR関数と組み合わせるのが効果的です。=IFERROR(INDEX(B:B, MATCH(G2, C:C, 0)), "該当なし")このようにすることで、検索値が見つからない場合に「該当なし」と表示され、見た目も分かりやすくなります。
よくある質問FAQ
Q1: INDEX MATCHはVLOOKUPと比べて何が優れていますか?
A1: 主な優位点は以下の3点です。
- 検索列の自由度が高い: VLOOKUPと異なり、検索値がある列が、取得したいデータの右側にあっても問題なく検索できます。
- 列の追加・削除に強い: 列の追加・削除によってVLOOKUPの数式修正が必要になる場合がありますが、INDEX MATCHは列範囲を直接指定するため、修正の手間が減ります。
- パフォーマンス: 大量のデータを扱う場合、INDEX MATCHの方がVLOOKUPより処理速度が速いことがあります。
Q2: 複数条件で検索したい場合はどうすれば良いですか?
A2: INDEX MATCHは、工夫次第で複数条件での検索にも対応できます。基本的な組み合わせの範疇を超えますが、例えばMATCH関数の中で配列数式を使って複数の条件を結合する方法などがあります。まずは単一条件でのINDEX MATCHを完全にマスターし、その後に発展的な使い方に挑戦してみることをお勧めします。
Q3: XLOOKUPが使える場合はINDEX MATCHは不要ですか?
A3: Excel 2019以降やMicrosoft 365ではXLOOKUP関数が使えます。XLOOKUPはINDEX MATCHと同様に左方向検索が可能で、構文もシンプルです。ただし古いExcelファイルを共有する職場環境ではXLOOKUPが使えない場合もあるため、INDEX MATCHも覚えておくと安心です。
まとめ
INDEX MATCHはVLOOKUPの「左方向検索不可」という制約を克服する強力な組み合わせです。MATCHで行番号を特定し、INDEXでその位置のデータを抽出することで、データ検索の柔軟性を高めます。IFERRORと組み合わせると、検索値が見つからない場合も「該当なし」と表示でき、実務で安心して使えます。

コメント