※本ページにはプロモーション(広告)が含まれています
【2026年最新版】ExcelのINDEX関数とMATCH関数を組み合わせた使い方【完全ガイド】
ExcelでデータをVLOOKUPで検索しようとしたら「左方向には検索できない」「列番号が変わったら数式を直さなければならない」と困った経験はありませんか?そんな悩みを解消するのが、INDEX関数とMATCH関数の組み合わせです。
INDEX+MATCHはVLOOKUPより柔軟で強力な検索が可能なため、Excelの中上級者が必ず習得するテクニックです。本記事では、基本的な構文から左方向検索、複数条件検索、最新のXMATCH関数まで、実用例を交えて丁寧に解説します。

この記事でわかること
- INDEX関数・MATCH関数それぞれの基本的な使い方
- INDEX+MATCHの組み合わせ構文と仕組み
- VLOOKUPとの違いとINDEX+MATCHのメリット
- 左方向検索・複数条件検索の実用例
- XMATCH関数との違いと使い分け
- よくあるエラーと対処法
INDEX関数とMATCH関数の基礎知識
INDEX関数とは
INDEX関数は、指定した範囲の中から「〇行目・〇列目にある値を返す」関数です。
=INDEX(配列, 行番号, [列番号])
- 配列: 値を取り出したいセル範囲
- 行番号: 取り出したい値が何行目にあるか
- 列番号(省略可): 取り出したい値が何列目にあるか
例えば =INDEX(A1:C10, 3, 2) と書くと、A1〜C10の範囲の3行目・2列目(B3)の値を返します。
MATCH関数とは
MATCH関数は、指定した範囲の中から「探したい値が何番目にあるか(位置)を返す」関数です。
=MATCH(検索値, 検索範囲, [照合の種類])
- 検索値: 探したい値
- 検索範囲: 1行または1列のセル範囲
- 照合の種類: 0(完全一致)、1(以下)、-1(以上)
例えば =MATCH("田中", A1:A10, 0) と書くと、A1〜A10の中で「田中」が何行目にあるかを数値で返します。「田中」がA4にあれば「4」が返ります。
INDEX+MATCHの組み合わせの仕組み
2つの関数を組み合わせると「MATCH関数が返した位置番号をINDEX関数の行番号として使う」ことができ、名前を指定して関連データを取り出す検索式になります。
=INDEX(取り出したい列の範囲, MATCH(検索値, 検索する列の範囲, 0))
MATCHが「検索値が何行目にあるか」を調べ、INDEXがその行番号の値を取り出す、という流れです。
VLOOKUPとINDEX+MATCHの違い・メリット比較
| 比較項目 | VLOOKUP | INDEX+MATCH |
|---|---|---|
| 検索方向 | 左端の列から右方向のみ | 左右どちらの方向も可能 |
| 列番号の指定 | 数値で指定(列追加で変わる) | 範囲指定(列追加の影響なし) |
| 複数条件検索 | 単独では不可 | 配列数式で可能 |
| 大文字・小文字の区別 | 区別しない | EXACT関数と組み合わせ可能 |
| 処理速度 | やや速い(シンプルな場合) | 複雑な検索では優位な場合も |
| 数式の可読性 | シンプルでわかりやすい | やや複雑だが柔軟性が高い |
INDEX+MATCHの実用例

例1: 基本的な名前検索(VLOOKUP相当)
社員名から部署を検索する例です。A列に社員名、B列に部署が入っているとします。
=INDEX(B:B, MATCH("田中太郎", A:A, 0))
「田中太郎」がA列の何行目にあるかをMATCHで調べ、同じ行のB列(部署)をINDEXで取り出します。
例2: 左方向検索(VLOOKUPではできない)
商品コードがB列、商品名がA列にある場合(コードが右、名前が左)に商品コードで商品名を検索する例です。VLOOKUPでは左側の列は取り出せませんが、INDEX+MATCHなら問題ありません。
=INDEX(A:A, MATCH("P001", B:B, 0))
B列から「P001」の位置を特定し、同行のA列(商品名)を返します。
例3: 複数条件での検索(Ctrl+Shift+Enterの配列数式)
A列に部署名、B列に役職、C列に氏名が入っていて「営業部かつ部長」の氏名を検索する例です。
=INDEX(C:C, MATCH(1, (A:A="営業部")*(B:B="部長"), 0))
この数式はExcel 2019以前では Ctrl+Shift+Enter で確定(配列数式として入力)する必要があります。Excel 365・2021ではEnterのみで動作します。
仕組みとしては、A列が「営業部」かつB列が「部長」の場合に1、それ以外は0になる配列を作り、MATCHで最初の「1」の位置を見つけています。
例4: 価格一覧から最安値の商品名を取得
A列に商品名、B列に価格が入っているとき、最安値の商品名を取り出す例です。
=INDEX(A:A, MATCH(MIN(B:B), B:B, 0))
MINでB列の最小値を求め、その値がB列の何行目にあるかをMATCHで特定し、同行のA列の商品名をINDEXで返します。
例5: 複数列を一度に取り出す(複数列返し)
名前を検索してA〜D列の情報を一括で取り出す場合、列番号の部分を配列にします。
=INDEX(A:D, MATCH("山田花子", A:A, 0), {1,2,3,4})
ただしこの方法はExcelバージョンによって動作が異なります。Excel 365ではスピル機能により複数セルに自動展開されます。
XMATCH関数との違いと使い分け
Excel 365・2021から追加されたXMATCH関数はMATCH関数の進化版です。INDEX関数と組み合わせてさらに強力な検索ができます。
XMATCH関数の構文
=XMATCH(検索値, 検索範囲, [一致モード], [検索モード])
| 引数 | 説明 |
|---|---|
| 検索値 | 探したい値 |
| 検索範囲 | 検索する1行または1列の範囲 |
| 一致モード | 0=完全一致、-1=完全一致または以下、1=完全一致または以上、2=ワイルドカード一致 |
| 検索モード | 1=先頭から検索、-1=末尾から検索、2=バイナリ昇順、-2=バイナリ降順 |
MATCH vs XMATCH どちらを使うべきか
- Excel 365/2021を使用している: XMATCHを使うと末尾からの検索やワイルドカードが簡単に使える
- Excel 2019以前、複数バージョン対応が必要: MATCHを使う(互換性が高い)
- XLOOKUP関数が使える環境: INDEX+MATCHの代わりにXLOOKUPで完結する場合も多い
この記事に関連するおすすめ商品
Microsoft 365 Personal 1年版 公式ライセンス
約14,000円
INDEX+MATCH関数・XLOOKUP関数をフル活用できる最新Excel
Dell 27インチ モニター フルHD IPS FHD
約25,000〜35,000円
Excelの複数シート参照・INDEX+MATCH作業が快適な大画面モニター
ロジクール MX Master 3S ワイヤレスマウス 静音 高精度
約12,000〜18,000円
ExcelのINDEX関数・セル選択操作が快適な高精度ワイヤレスマウス
※ 価格は変動する場合があります。最新価格はリンク先でご確認ください
よくあるエラーと対処法

#N/Aエラーが表示される
MATCH関数が検索値を見つけられない場合に発生します。
- 検索値のスペルや余分なスペースを確認(TRIM関数で整形)
- 照合の種類が0(完全一致)になっているか確認
- 数値と文字列の混在がないか確認(例: “100”と100は別物)
- IFERROR関数で囲んでエラー時に空白や代替テキストを表示:
=IFERROR(INDEX(...),"見つかりません")
#REF!エラーが表示される
INDEXの配列範囲とMATCHの検索範囲の行数が一致していない場合などに発生します。範囲指定を確認してください。
検索結果が想定と違う値になる
照合の種類を0(完全一致)にしていない場合、近似値が返されることがあります。第3引数には必ず「0」を指定する習慣をつけましょう。
FAQ(よくある質問)
Q1. INDEX+MATCHはVLOOKUPより難しいですか?
A. 最初は2つの関数を組み合わせる点でとっつきにくいですが、慣れると非常に直感的です。VLOOKUPが「左端から右方向のみ」という制約を覚えておく必要があるのに対し、INDEX+MATCHは「どこでも自由に検索できる」という覚え方をすると理解しやすいです。
Q2. INDEX+MATCHはXLOOKUPが使える環境では不要ですか?
A. Excel 365/2021でXLOOKUPが使える場合、多くのケースでXLOOKUPの方が簡潔に書けます。ただしINDEX+MATCHは複雑な集計との組み合わせやExcel 2019以前との互換性が必要な場面では依然として有用です。
Q3. 複数条件検索を配列数式なしで行う方法はありますか?
A. Excel 365/2021の環境であればCONCAT関数やXMATCH+XLOOKUPを使って配列数式なしで複数条件検索ができます。また、補助列を追加して複数条件を1つの文字列に結合してからMATCHで検索する方法も有効です。
Q4. INDEX+MATCHで最後に一致した値を取り出すには?
A. MATCHは最初に一致した位置を返します。最後の一致位置を取得するには、XMATCHの検索モードを-1(末尾から検索)にするか、配列数式を工夫する必要があります。Excel 365ならXMATCHが最も簡単な解決策です。
Q5. INDEX+MATCHで行と列を両方可変にする(二方向検索)は可能ですか?
A. 可能です。=INDEX(データ範囲, MATCH(行検索値, 行見出し列, 0), MATCH(列検索値, 列見出し行, 0)) の形式でINDEXの行番号・列番号両方にMATCHを使います。これを「二方向検索」または「行列一致検索」と呼び、複雑な表からのデータ抽出に便利です。
まとめ
INDEX+MATCHは、VLOOKUPの制約(左方向検索不可・列番号の固定)を解消する強力な関数の組み合わせです。慣れるまでは数式が複雑に見えますが、「MATCHで位置を調べてINDEXで値を取り出す」というシンプルな仕組みを理解すれば、様々な検索シーンで活用できます。
特に左方向検索・複数条件検索・最大最小値の関連データ取り出しなど、VLOOKUPでは対応できないケースでINDEX+MATCHは威力を発揮します。Excel 365/2021をお使いであればXMATCHやXLOOKUPも組み合わせて、さらに効率的なデータ検索を実現してください。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!