Excelのデータ検索で定番のVLOOKUP関数に物足りなさを感じたことはありませんか?
そんなときに強力な解決策となるのが INDEX関数とMATCH関数の組み合わせ です。柔軟性が高く、複雑な検索にも対応できるため、上級者にも愛用されています。
この記事では、INDEX+MATCH関数の使い方と実用例をわかりやすく紹介します。
INDEX関数とMATCH関数の基本
INDEX関数とは?
指定した範囲から、行番号・列番号に対応するセルの値を返す関数
=INDEX(範囲, 行番号, [列番号])
関連記事:INDEX関数の使い方
MATCH関数とは?
指定した値が、範囲の中で何番目にあるか(位置)を返す関数
=MATCH(検索値, 検索範囲, [照合の型])
関連記事:MATCH関数の使い方
INDEX + MATCH関数の基本構文
=INDEX(取得したい範囲, MATCH(検索値, 検索範囲, 0))
使用例
例:名前に対応する点数を検索
テスト結果の一覧から「鈴木さんの点数」をINDEX + MATCH関数を使って取り出してみましょう。

① MATCH関数で「位置を見つける」
MATCH関数は、検索値(= 鈴木)が、B3:B5の中で何番目にあるかを探します。
=MATCH(E3,B3:B5,0)
MATCH関数の最後の「0」は「完全一致」を意味します。
部分一致ではなく、「鈴木」とぴったり一致するデータを探すときに使います。

B列が「B3:佐藤 B4:鈴木 B5:高橋 」の場合、「鈴木」は2番目にあるため、
MATCH関数の結果は「2」 になります。
② INDEX関数で「その位置の値を取り出す」
MATCH関数の結果から、「鈴木」が2番目にあることが分かっているので、
次にINDEX関数を使って、C3:C5の中から2番目の値(=鈴木さんの点数)を取り出します。
=INDEX(C3:C5,2)
この式では、範囲 C3:C5 の中の 2番目の値 が返されます。

C列が「C3:80 C4:90 C5:85 」の場合、INDEX関数の結果は「90」 になります。
③ INDEX関数とMATCH関数を組み合わせる
2つの関数を組み合わせると、INDEX+MATCH関数の完成です。
=INDEX(C3:C5,MATCH(E3,B3:B5,0))

検索値に「鈴木」と入力すると、MATCH関数がB列で「鈴木」の位置を見つけ、
INDEX関数がC列の2番目の値(=90点)を返します。
結果:90(鈴木さんの点数)
MATCH関数が「探す」、INDEX関数が「取りに行く」。
この関係を覚えておけば、INDEX + MATCH関数を自在に使いこなせます。
INDEX+MATCHの強み
| 特徴 | 説明 |
| 柔軟な列選択 | 検索対象が左にあってもOK(VLOOKUPは左端限定) |
| 列の追加に強い | 列番号ではなく列参照なので、構造変更に強い |
| 並び順に依存しない | データがソートされていなくても問題なし |
| 垂直・水平の両方に対応 | MATCHの検索範囲を列方向にすれば行方向検索も可能 |
横方向の検索例
例:科目名から点数を取得
| A列 | B列 | C列 | |
| 1行目 | 国語 | 数学 | 英語 |
| 2行目 | 80 | 90 | 70 |
=INDEX(A2:C2, MATCH("数学", A1:C1, 0)) → 90
応用:2軸検索(行+列)
例:クロス表から得点を取得
| A列 | B列 | C列 | |
| 1行目 | 国語 | 数学 | |
| 2行目 | 鈴木 | 80 | 90 |
| 3行目 | 高橋 | 70 | 95 |
=INDEX(B2:C3, MATCH("高橋", A2:A3, 0), MATCH("数学", B1:C1, 0)) → 95
注意点
- MATCHの照合型は「0(完全一致)」が基本
- INDEXの行・列番号は検索範囲内の位置として指定する
- 検索値が見つからない場合は
#N/Aエラーが返る
まとめ
INDEX+MATCH関数の組み合わせは、VLOOKUPよりも柔軟で堅牢な検索手段です。表の構造が変更されても壊れにくく、横方向や2軸の検索にも対応可能。検索を極めたいなら、INDEX+MATCHの習得は避けて通れません! XLOOKUP関数への理解にもつながるので、ぜひ実務で使ってみましょう。
関連記事:VLOOKUP関数の使い方
関連記事:XLOOKUP関数の使い方