エクセル関数辞典 エクセル関数辞典

INDEX+MATCH関数の使い方|VLOOKUP超えの検索術

INDEX MATCH 検索 参照 Excel関数
広告スペース (article-top)

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ノートPC89000
A002マウス2500
A003キーボード5800
=INDEX(B2:B4, MATCH(E2, A2:A4, 0))

MATCH関数がE2の値をA2:A4から探し、位置(例:2番目)を返します。その位置をINDEX関数がB2:B4に適用し、対応する商品名(マウス)を返します。

実践例2:左方向への検索

VLOOKUPでは実現できない、検索列より左側のデータを取得する例です。

部署名部署コードフロア
営業部D0013F
開発部D0025F
総務部D0032F

部署コードから部署名(左側)を取得します。

=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+MATCHVLOOKUP
記述の簡潔さやや複雑シンプル
左方向の検索可能不可
列の挿入・削除への耐性強い弱い
複数条件の検索可能不可
処理速度(大量データ)速いやや遅い
学習コストやや高い低い

Google スプレッドシートでの互換性

INDEX関数とMATCH関数はGoogle スプレッドシートでも同じ構文で使用できます。配列数式の入力方法がExcelと若干異なり、Google スプレッドシートではArrayFormula関数を使用するか、自動的に配列として処理される場合があります。

まとめ

INDEX+MATCH関数の組み合わせは、VLOOKUPの制限を超える柔軟な検索を実現します。

  • 左方向への検索が可能
  • 列の挿入・削除の影響を受けにくい
  • 複数条件での検索に対応
  • 大量データでの処理速度が優れている

最初は数式が複雑に見えますが、仕組みを理解すれば応用範囲が広がります。VLOOKUPで対応できない場面に遭遇したら、INDEX+MATCHを検討してみてください。

広告スペース (article-bottom)

あわせて読みたい