INDEX+MATCH関数の使い方|VLOOKUP超えの検索術
INDEX関数とMATCH関数を組み合わせることで、VLOOKUPでは対応できない柔軟な検索が可能になります。左方向への検索、複数条件での検索、列の挿入に強い数式の作成など、実務で重宝するテクニックです。
この記事では、INDEX関数とMATCH関数それぞれの基本から、組み合わせた使い方まで解説します。
INDEX関数の基本構文
=INDEX(配列, 行番号, [列番号])
INDEX関数の引数
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 配列 | データが入力されたセル範囲 | 必須 |
| 行番号 | 取得する行の位置を指定する数値 | 必須 |
| 列番号 | 取得する列の位置を指定する数値(1列の範囲では省略可) | 任意 |
INDEX関数は、指定した範囲から行番号と列番号の交差するセルの値を返します。
=INDEX(A1:C5, 3, 2)
この数式は、A1:C5の範囲の3行目・2列目にあるセルの値を返します。
MATCH関数の基本構文
=MATCH(検索値, 検索範囲, [照合の型])
MATCH関数の引数
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 検索値 | 検索する値 | 必須 |
| 検索範囲 | 検索対象の1行または1列の範囲 | 必須 |
| 照合の型 | 0=完全一致、1=以下の最大値、-1=以上の最小値 | 任意 |
MATCH関数は、検索値が範囲内で何番目にあるかを返します。
=MATCH("マウス", B1:B5, 0)
B1:B5の範囲で「マウス」が何番目にあるかを返します。
INDEX+MATCHの組み合わせ
MATCH関数の結果をINDEX関数の行番号として使うことで、VLOOKUPと同様の検索が実現できます。
=INDEX(戻り範囲, MATCH(検索値, 検索範囲, 0))
実践例1:基本的な検索(VLOOKUPと同等)
商品マスタ(A2:C5)が以下の場合に、商品コードから商品名を取得します。
| 商品コード | 商品名 | 単価 |
|---|---|---|
| A001 | ノートPC | 89000 |
| A002 | マウス | 2500 |
| A003 | キーボード | 5800 |
=INDEX(B2:B4, MATCH(E2, A2:A4, 0))
MATCH関数がE2の値をA2:A4から探し、位置(例:2番目)を返します。その位置をINDEX関数がB2:B4に適用し、対応する商品名(マウス)を返します。
実践例2:左方向への検索
VLOOKUPでは実現できない、検索列より左側のデータを取得する例です。
| 部署名 | 部署コード | フロア |
|---|---|---|
| 営業部 | D001 | 3F |
| 開発部 | D002 | 5F |
| 総務部 | D003 | 2F |
部署コードから部署名(左側)を取得します。
=INDEX(A2:A4, MATCH(E2, B2:B4, 0))
検索範囲と戻り範囲を自由に指定できるため、列の位置関係に制約がありません。
実践例3:複数条件での検索
商品名と地域の2つの条件で検索する例です。配列数式として使用します。
| 商品名 | 地域 | 売上 |
|---|---|---|
| ノートPC | 東京 | 500000 |
| マウス | 大阪 | 120000 |
| ノートPC | 大阪 | 450000 |
=INDEX(C2:C4, MATCH(E2&F2, A2:A4&B2:B4, 0))
検索値と検索範囲の両方で文字列を結合することで、複数条件の検索を実現します。Microsoft 365やExcel 2021では通常の数式として入力できます。古いバージョンのExcelでは、Ctrl+Shift+Enterで配列数式として入力してください。
実践例4:行と列の両方を動的に検索する
INDEX関数の列番号にもMATCH関数を使うことで、行と列の両方を動的に検索できます。
月別の売上表から、商品名と月を指定して売上を取得する例です。
=INDEX(B2:D4, MATCH(F2, A2:A4, 0), MATCH(G2, B1:D1, 0))
F2に商品名、G2に月名を入力すると、交差する売上データが返されます。
実践例5:IFERROR関数との組み合わせ
検索値が見つからない場合のエラー処理です。
=IFERROR(INDEX(B2:B4, MATCH(E2, A2:A4, 0)), "該当なし")
VLOOKUPと同様に、IFERROR関数で#N/Aエラーを任意の文字列に置き換えます。
よくあるエラーと対処法
#N/Aエラー
MATCH関数で検索値が見つからない場合に発生します。以下を確認してください。
- 検索値のスペルや全角半角が一致しているか
- MATCH関数の第3引数が0(完全一致)になっているか
- 検索範囲の指定が正しいか
#REFエラー
INDEX関数の行番号が範囲の行数を超えている場合に発生します。MATCH関数の検索範囲とINDEX関数の配列の行数が一致しているか確認してください。
#VALUE!エラー
配列数式が必要な場面で通常の数式として入力した場合に発生することがあります。Ctrl+Shift+Enterで再入力してください(Microsoft 365以外の場合)。
INDEX+MATCHとVLOOKUPの比較
| 項目 | INDEX+MATCH | VLOOKUP |
|---|---|---|
| 記述の簡潔さ | やや複雑 | シンプル |
| 左方向の検索 | 可能 | 不可 |
| 列の挿入・削除への耐性 | 強い | 弱い |
| 複数条件の検索 | 可能 | 不可 |
| 処理速度(大量データ) | 速い | やや遅い |
| 学習コスト | やや高い | 低い |
Google スプレッドシートでの互換性
INDEX関数とMATCH関数はGoogle スプレッドシートでも同じ構文で使用できます。配列数式の入力方法がExcelと若干異なり、Google スプレッドシートではArrayFormula関数を使用するか、自動的に配列として処理される場合があります。
まとめ
INDEX+MATCH関数の組み合わせは、VLOOKUPの制限を超える柔軟な検索を実現します。
- 左方向への検索が可能
- 列の挿入・削除の影響を受けにくい
- 複数条件での検索に対応
- 大量データでの処理速度が優れている
最初は数式が複雑に見えますが、仕組みを理解すれば応用範囲が広がります。VLOOKUPで対応できない場面に遭遇したら、INDEX+MATCHを検討してみてください。