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)
↑ 範囲の1列目(A列)を検索する仕様…でもD2の商品コードはB列にしかない → #N/A
→ 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 は近似一致(昇順にソート済みの範囲が前提 で、検索値以下の最大値 の位置を返す)、-1 はその逆で降順ソートが前提の「検索値以上の最小値」です。範囲のソートを忘れると意図しない値が返る事故が多いので、ハマりやすさを考えると 常に 0 を指定する のがおすすめ。
Q. INDEX+MATCH のどこに IFERROR を付けるべき?
A. 全体を包みます: =IFERROR(INDEX(...), "")。詳しくは IFERROR の使い方と落とし穴 を参照してください。
Q. 結果がどうしても合わない…
記事の手順を試しても直らない場合、特定の構成だけで起きるレアケースかもしれません。AIサポートで対話的に原因を切り分けてみてください。
体系的に学びたい人へ
PRINDEX+MATCHのような実務関数を「なぜそう動くか」から学びたい人へ。基本関数からXLOOKUP・スピルまで網羅した一冊です。
Excel関数 やさしい教科書※ 当サイトはアフィリエイトプログラムを利用しており、上記リンク経由の購入で運営者が報酬を得ることがあります。
次に読む
Excelが重い・遅い・応答なしになる原因と対処【症状別に切り分け】
Excelを開くのに時間がかかる、スクロールがカクつく、保存が終わらない、応答なしで固まる…そんな重さの原因は「ファイル肥大/計算過負荷/描画過負荷」の3系統。使用範囲肥大・条件付き書式の重複・揮発性関数・画像埋め込み・.xls形式などを症状別に切り分けて、初心者でもできる対処法を1つずつ順に紹介します。
XLOOKUPへの乗り換えガイド+動かない・#NAME?・#SPILL!の直し方【VLOOKUPの上位互換】
XLOOKUPはVLOOKUPの上位互換。既定で完全一致・左方向も検索可・列番号指定不要・見つからない時のメッセージまで1本で書ける。乗り換え方と、#NAME?(バージョン非対応)・#SPILL!(書き出し先が空いていない)が出た時の直し方を、症状別に確認手順で解説します。
Excelマクロのはじめかた|「そもそも何?」から最初の一歩までを5分で
Excelマクロって結局なに? VBAと同じ? 何が自動化できるの? ──触ったことが無い人向けに、マクロの正体・自動化できる身近な例・コードを書かずに始める2つの方法(AIに頼む/操作を録る)まで、最低限の安心ごとと一緒に5分で案内します。