INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面【コピペで使える】
VLOOKUP を覚えて便利に使っていると、必ずぶつかる壁があります。
- 検索したい列が表の 一番左じゃない
- 表に 列を挿入したら数式がズレた
- 「商品 × 支店」のような 複数条件で探したい
これらは VLOOKUP では そのままだと解けません。
そんなときに頼りになるのが INDEX + MATCH の組み合わせです。
この記事では、
VLOOKUP の弱点を克服する4つの典型場面と、コピペで動く INDEX+MATCH の数式
を紹介します。 読み終わるころには、VLOOKUP では諦めていたケースを自力で解決できるようになります。
💡 関連記事:
- VLOOKUPで#N/Aが出る5つの原因と解決法 ← 先にこちらでVLOOKUPの基本を押さえる
- IF関数の入れ子から卒業する5つの方法 ← 同じ「卒業」シリーズ
- IFERROR の使い方と落とし穴
まずは基本:INDEX+MATCH とは(30秒で確認)
INDEX と MATCH を組み合わせると、VLOOKUPと同じ動きをより柔軟に書けます。
=INDEX(取得したい範囲, MATCH(検索値, 検索範囲, 0))
MATCH(検索値, 検索範囲, 0)→ 検索範囲の中で何行目にあるかを返すINDEX(取得範囲, 行番号)→ その行番号の値を返す
第3引数 0 は「完全一致」 を意味します(VLOOKUPの FALSE と同じ役割)。

📌 ポイント:
INDEXは「取り出したい列」を、MATCHは「探したい列」をそれぞれ別に指定できる。これが VLOOKUP との最大の違いです。
場面①:検索列が左端にないとき
VLOOKUP には 致命的な制約 があります。
検索値は 検索範囲の一番左の列 にいなければならない
例えば「A列に商品名、B列に商品コード」と並んでいて、コードから商品名を引きたい ケース。VLOOKUPでは直接できません。
Before(VLOOKUPでは解けない)
=VLOOKUP(D2, A2:B5, 1, FALSE)
↑ A列を検索…でも検索したいのはB列のコード
→ VLOOKUPでは解けない。列順を入れ替える必要がある。
After(INDEX+MATCH なら解ける)
=INDEX(A2:A5, MATCH(D2, B2:B5, 0))
「B列でD2を探して見つかった行を、A列から取り出す」という素直な書き方になります。

💡 関連: VLOOKUPの「左端列にない」問題の詳しい解説は VLOOKUPで#N/Aが出る5つの原因と解決法 → 原因④ で書いています。
場面②:表に列を挿入したら数式がズレた
VLOOKUPの 第3引数(列番号) は固定の数値で指定します。
=VLOOKUP(A2, A:C, 3, FALSE)
↑ 3列目を取り出す
これだと、A列とC列の間に新しい列を挿入 すると「3列目」が別のデータに変わってしまいます。
INDEX+MATCH なら安全
=INDEX(C2:C5, MATCH(E2, A2:A5, 0))
INDEX は「範囲そのもの」を指定するので、列挿入時に 数式の範囲が自動で追従 します。

📌 ポイント: 列挿入の頻度が高い表(受注管理・在庫管理など)では、INDEX+MATCH の方が メンテナンス事故 が起きにくいです。
場面③:複数条件で検索したい
「商品Aかつ大阪支店」のような 複数条件のマッチ は、VLOOKUP単体では解けません。
After(INDEX+MATCH の配列式)
=INDEX(C2:C5, MATCH(1, (A2:A5=D2)*(B2:B5=E2), 0))
仕組み:
(A2:A5=D2)は「TRUE/FALSEの配列」(1/0として計算される)(B2:B5=E2)も同じく- 掛け算
*で「両方TRUE」の行だけ1、それ以外は0 MATCH(1, ..., 0)で「最初に1が現れる行」を取得

📌 ポイント: Excel 365 / Excel 2021 ならこれは普通に動きます。古いバージョンでは 配列数式として
Ctrl + Shift + Enterで確定する必要があります。
場面④:横方向の検索(HLOOKUP不要)
「表の 1行目 から探して、対応する 下のセル を取り出したい」── HLOOKUP の出番ですが、これも INDEX+MATCH で書けます。
=INDEX(A2:E2, MATCH(G1, A1:E1, 0))
- 1行目(
A1:E1)から検索値を探す - 2行目(
A2:E2)の同じ列から値を取り出す
VLOOKUP / HLOOKUP の使い分けを覚えずに済むので、INDEX+MATCH に統一する と頭の中がスッキリします。
XLOOKUP との使い分け
Microsoft 365 / Excel 2021 以降なら XLOOKUP という後継関数があります。
=XLOOKUP(検索値, 検索範囲, 取得範囲)
XLOOKUP は INDEX+MATCH の機能を 1関数で書ける うえに、左端列の制約もないので、新規に書くなら XLOOKUP が最有力です。
| 関数 | 強み | 弱み |
|---|---|---|
VLOOKUP | 古くからあり情報も多い | 左端列のみ・列挿入で壊れる |
INDEX+MATCH | バージョン制約が緩い・柔軟 | 数式がやや長い |
XLOOKUP | 短く書ける・引数も直感的 | Excel 2019以前では使えない |
📌 ポイント: 配布先のExcelバージョンが分からないときは INDEX+MATCH が一番安全。自分専用 or 2021以降確定なら XLOOKUP が楽。
まとめ:使い分けフロー
| 場面 | パターン | 数式の核 |
|---|---|---|
| ① | 左端列にない | INDEX(取得列, MATCH(検索値, 検索列, 0)) |
| ② | 列挿入で安全 | 範囲を直接指定 → 自動追従 |
| ③ | 複数条件 | MATCH(1, (A=x)*(B=y), 0) |
| ④ | 横方向 | 検索範囲を行で指定 |
よくある質問
Q. INDEX+MATCH と XLOOKUP、覚えるならどっち?
A. 配布先の環境がモダンなら XLOOKUP が一番楽。古い環境も視野に入るなら INDEX+MATCH が安心です。両方覚えれば最強。
Q. MATCH の第3引数 0 の意味は?
A. 「完全一致」を意味します。VLOOKUPの FALSE と同じ役割。1 だと近似一致になりますが、ハマりやすいので 常に 0 を指定する のがおすすめ。
Q. INDEX+MATCH のどこに IFERROR を付けるべき?
A. 全体を包みます: =IFERROR(INDEX(...), "")。詳しくは IFERROR の使い方と落とし穴 を参照してください。
Q. 結果がどうしても合わない…
記事の手順を試しても直らない場合、特定の構成だけで起きるレアケースかもしれません。AIサポートで対話的に原因を切り分けてみてください。
関連記事
- ピボットテーブルが思いどおりに集計できない【合計・個数・比率・更新を症状別に】
- Excelマクロ(VBA)が動かない・エラーが出るときの原因切り分け【症状別】
- 数式が計算されない・=SUMがそのまま表示される【3つの原因で切り分け】
- 絶対参照と相対参照の使い分け【$ と F4 キーで数式コピーがズレない】
- COUNTIF / COUNTIFS が動かない6つの原因と解決法【上から順に試せばOK】
- Excelショートカット厳選20選【明日から作業が倍速になる】
- IF関数の入れ子から卒業する5つの方法【パターン別に使い分け】
- SUMIF / SUMIFS が動かない6つの原因と解決法【上から順に試せばOK】
- IFERROR の使い方と落とし穴【エラーを隠す前に読む完全ガイド】
- Excelの主要エラー6種【症状→原因→解決の早見表】
- VLOOKUPで#N/Aが出る5つの原因と解決法【上から順に試せばOK】