Excelでデータの検索・抽出を行う際、多くの人が最初に使うのは VLOOKUP 関数。
しかし、
「列の左側を参照できない」
「列番号を変えると壊れる」
などの制限もあります。
そんなときに役立つのが、INDEXとMATCH関数の組み合わせです。
この記事では基本構文から実践的な応用、よくあるエラーの解消、VLOOKUPとの違い、複数条件対応まで解説します。
Contents
INDEX関数とは?|セルの位置から値を取り出す

excelCopyEdit=INDEX(範囲, 行番号, [列番号])
例:
excelCopyEdit=INDEX(A2:C5, 2, 3)
→ A2:C5の2行目3列目の値を返す
- 範囲内の「行・列の位置」から値を取り出す関数
- 直接セル参照を使わないため、柔軟性が高い
MATCH関数とは?|検索値の「位置」を返す
excelCopyEdit=MATCH(検索値, 検索範囲, [照合の型])
例:
excelCopyEdit=MATCH("東京", A2:A5, 0)
→ A2:A5の中で「東京」が何番目にあるか(位置)を返す
- **完全一致なら「0」**を指定
- 一致しない場合は
#N/Aエラーが返る
INDEXとMATCHを組み合わせる基本構文

excelCopyEdit=INDEX(返したい範囲, MATCH(検索値, 検索範囲, 0))
例:
| A列(商品) | B列(価格) |
|---|---|
| りんご | 100円 |
| バナナ | 150円 |
| みかん | 120円 |
excelCopyEdit=INDEX(B2:B4, MATCH("バナナ", A2:A4, 0))
→ 結果:150円
→ 「A列から検索して、B列の該当行を返す」という操作が可能
INDEX+MATCH vs VLOOKUP の違いと比較
| 項目 | INDEX+MATCH | VLOOKUP |
|---|---|---|
| 検索方向 | 左右どちらも可 | 左から右のみ |
| 列削除に強い? | 強い(列位置を数式で特定) | 弱い(列番号が壊れやすい) |
| 処理速度(大規模データ) | 高速(MATCHは軽量) | 中程度 |
| 可読性 | やや複雑 | 単純 |
結論:中級者以上はINDEX+MATCHのほうが拡張性・保守性に優れています。
【実践】MATCH関数で列番号を動的に指定する応用例
excelCopyEdit=INDEX(B2:D4, MATCH("みかん", A2:A4, 0), MATCH("価格", B1:D1, 0))
- 左側のMATCH:行を検索
- 右側のMATCH:列を検索(ヘッダー名から取得)
→ 「見出し名」で列番号を動的に取得できるのが強み
よくあるエラーとその対処法

#N/Aエラー:一致する値が見つからない
MATCHの検索値と範囲のデータ型の不一致に注意(数値 vs 文字列)- スペースの混入もエラーの原因に(
TRIM関数で解消可能)
#REF!エラー:行や列番号が範囲外
MATCHの戻り値が0またはN/AのままINDEXに渡っていないか確認
INDEX+MATCHで複数条件に対応する方法
MATCHは通常1条件しか扱えませんが、配列数式で工夫することで複数条件検索も可能です。
例:名前が「田中」かつ部門が「営業」の行番号を取得
excelCopyEdit=MATCH(1, (A2:A100="田中")*(B2:B100="営業"), 0)
*はAND条件(両方が真なら1)- この構文は配列数式なので、Excel 365以外では
Ctrl + Shift + Enterが必要
INDEX+MATCHをさらに便利にする関数の組み合わせ
| 追加関数 | 用途 | 例 |
|---|---|---|
IFERROR | エラー時の値を制御 | =IFERROR(INDEX(...), "なし") |
INDIRECT | 文字列から参照を作る | =INDEX(INDIRECT("Sheet1!A1:A10"),...) |
TEXT | 書式付きで値を表示 | =TEXT(INDEX(...), "yyyy/mm/dd") |
よくある質問(FAQ)

INDEX関数とMATCH関数は何に使う?
INDEX:セルの位置から値を取得MATCH:指定値の位置を取得
→ 組み合わせることで、検索値に対応する任意の列の値を取得可能
VLOOKUPとINDEX・MATCHはどちらが速い?
- 一般に
INDEX+MATCHの方が高速・柔軟 - 大量データ処理では特に差が出ます
MATCH関数だけを使う場合は?
- 指定値の「位置」だけが必要なときに有効
- 例:
=MATCH("東京", A2:A100, 0)→ 「東京」の行番号
INDEX+MATCHで#N/Aになるのはなぜ?
- 検索値が見つからない
- データ型が違う("1" ≠ 1)
- 空白やスペースが含まれている可能性大
まとめ
INDEXとMATCHを組み合わせると、自由度の高い検索が実現できるVLOOKUPではできない「左検索」「列名指定」「柔軟な構造」に強い- 複数条件や列方向MATCHの活用で、業務レベルの表引きが可能に
#N/Aエラーや範囲外参照には、IFERRORなどの補助関数で対応を
正しく理解して使いこなせば、Excelでの検索処理が格段にパワーアップします。