エクセル迷子案内所
← 学習記事一覧

INDEX+MATCH で VLOOKUP の弱点を克服する4つの場面【コピペで使える】

公開: 2026-05-17

VLOOKUP を覚えて便利に使っていると、必ずぶつかる壁があります。

  • 検索したい列が表の 一番左じゃない
  • 表に 列を挿入したら数式がズレた
  • 「商品 × 支店」のような 複数条件で探したい

これらは VLOOKUP では そのままだと解けません。 そんなときに頼りになるのが INDEX + MATCH の組み合わせです。

この記事では、

VLOOKUP の弱点を克服する4つの典型場面と、コピペで動く INDEX+MATCH の数式

を紹介します。 読み終わるころには、VLOOKUP では諦めていたケースを自力で解決できるようになります。

💡 関連記事:


まずは基本:INDEX+MATCH とは(30秒で確認)

INDEXMATCH を組み合わせると、VLOOKUPと同じ動きをより柔軟に書けます

=INDEX(取得したい範囲, MATCH(検索値, 検索範囲, 0))
  • MATCH(検索値, 検索範囲, 0) → 検索範囲の中で何行目にあるかを返す
  • INDEX(取得範囲, 行番号) → その行番号の値を返す

第3引数 0 は「完全一致」 を意味します(VLOOKUPの FALSE と同じ役割)。

A列の商品コードからA003の行を探し、B列の同じ行から価格を取り出す例。E2に =INDEX(B2:B5,MATCH(D2,A2:A5,0)) で 1,200 が返る

📌 ポイント: 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列から取り出す」という素直な書き方になります。

A列に商品名・B列に商品コードという並びで、商品コード「1003」をMATCHでB列から探し、INDEXで対応する商品名「ぶどう」を取り出している例

💡 関連: 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 は「範囲そのもの」を指定するので、列挿入時に 数式の範囲が自動で追従 します。

A列の商品名から検索、価格はC列から取得。間にB列「在庫」が挿入されてもINDEXは追従し、F2の「ぶどう→300」が正しく取れる

📌 ポイント: 列挿入の頻度が高い表(受注管理・在庫管理など)では、INDEX+MATCH の方が メンテナンス事故 が起きにくいです。


場面③:複数条件で検索したい

「商品Aかつ大阪支店」のような 複数条件のマッチ は、VLOOKUP単体では解けません。

After(INDEX+MATCH の配列式)

=INDEX(C2:C5, MATCH(1, (A2:A5=D2)*(B2:B5=E2), 0))

仕組み:

  1. (A2:A5=D2) は「TRUE/FALSEの配列」(1/0として計算される)
  2. (B2:B5=E2) も同じく
  3. 掛け算 * で「両方TRUE」の行だけ 1、それ以外は 0
  4. MATCH(1, ..., 0) で「最初に 1 が現れる行」を取得

商品=「商品A」かつ支店=「大阪」の行(黄色ハイライト)を見つけて、C列の売上900を F2 に取り出している

📌 ポイント: 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サポートで対話的に原因を切り分けてみてください。

関連記事

それでも解決しないときは

記事の手順を試しても直らない場合、特定の構成だけで起きるレアケースかもしれません。対話で原因を1つずつ切り分けるのが最短です。

AI案内人に相談する(無料・登録不要)→