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での検索処理が格段にパワーアップします。