目次
はじめに
VLOOKUPの代替として注目を集めている「INDEX」と「MATCH」関数。特に「複数条件」で検索する場合、その真価を発揮します。本記事では、「INDEX」と「MATCH」関数を使った「複数条件」検索について、基礎から応用まで詳しく解説します。
「INDEX+MATCH」関数の基本構造
まず、単一条件での基本的な使い方を確認しましょう。
=INDEX(返値範囲, MATCH(検索値, 検索範囲, 0))
- INDEX関数:指定された範囲から特定の値を取り出す
- MATCH関数:検索範囲内での検索値の位置(行番号または列番号)を返す
複数条件でのINDEX、MATCH関数の使用方法
複数条件を使用する場合は、MATCH関数を入れ子にします:
=INDEX(返値範囲,
MATCH(1,
(条件範囲1=検索値1)*(条件範囲2=検索値2),
0
)
)
重要なポイント
- 条件式をカッコでくくり、掛け算「*」で連結します
- MATCH関数の検索値として「1」を指定します
具体例で学ぶ|Excelで「INDEXとMATCH」関数を使った「複数条件」検索の完全ガイド
以下のような売上データを例に考えてみましょう:
表1:売上データ(A2:D10のセル範囲)
行/列 | A | B | C | D |
---|---|---|---|---|
1 | 日付 | 商品 | 地域 | 売上 |
2 | 2024/4/1 | A商品 | 東京 | 1,000 |
3 | 2024/4/1 | B商品 | 大阪 | 1,500 |
4 | 2024/4/1 | C商品 | 福岡 | 800 |
5 | 2024/4/2 | A商品 | 大阪 | 1,200 |
6 | 2024/4/2 | B商品 | 東京 | 900 |
7 | 2024/4/2 | C商品 | 名古屋 | 1,100 |
8 | 2024/4/3 | A商品 | 福岡 | 1,300 |
9 | 2024/4/3 | B商品 | 名古屋 | 1,400 |
10 | 2024/4/3 | C商品 | 東京 | 950 |
検索条件入力セル
行/列 | F | G |
---|---|---|
1 | 検索条件 | 入力値 |
2 | 日付 | 2024/4/1 |
3 | 商品 | A商品 |
特定の日付と商品の売上を検索する場合:
=INDEX(D2:D10,
MATCH(1,
(A2:A10=G2)*(B2:B10=G3),
0
)
)
この数式は以下の要素で構成されています:
- 返値範囲 :D2:D10(売上データ)
- 条件範囲1:A2:A10(日付列)
- 条件範囲2:B2:B10(商品列)
- 検索値1 :G2(日付の検索条件)
- 検索値2 :G3(商品の検索条件)
検索結果の解説
上記の条件を「2024/4/1」の「C商品」で検索した場合の計算過程を見てみましょう:
表2:検索結果
計算項目 | 結果 |
---|---|
日付の一致 | {TRUE; TRUE; TRUE; FALSE; FALSE; FALSE; FALSE; FALSE; FALSE} |
商品の一致 | {FALSE; FALSE; TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; TRUE} |
条件の積 | {0; 0; 1; 0; 0; 0; 0; 0; 0} |
最終結果 | 800 |
計算の流れ:
- 日付の一致チェック(A2:A10=G2)
- 各行の日付と検索条件(2024/4/1)を比較
- 最初の「3行」がTRUE(一致)
- 商品の一致チェック(B2:B10=G3)
- 各行の商品と検索条件(C商品)を比較
- 「3」,「6」,「9」行目がTRUE(一致)
- 条件の積の計算((A2:A10=G2)*(B2:B10=G3))
- TRUEは1、FALSEは0として計算
- 両方の条件が一致する行のみ「1」となる
- この例では3行目のみが「1」
- MATCH関数で位置を特定
- 1が見つかった最初の位置「3」を返す
- INDEX関数で値を取得
- 返値範囲(D2:D10)の「3行目」の値を返す
- 結果として800が返される
この例では、「2024/4/1」の「C商品」の売上「800」が正しく抽出されています。エラーとならない理由は:
- 検索条件が正確に一致する行が存在する
- 数式で参照している範囲が正しく設定されている
Excel練習用サンプルデータ|ダウンロード
上記で解説したExcelデータを以下からダウンロードできますので、練習用としてお使いください。
応用テクニック
1. 3つ以上の条件を使用する
=INDEX(返値範囲,
MATCH(1,
(条件範囲1=検索値1)*(条件範囲2=検索値2)*(条件範囲3=検索値3),
0
)
)
2. 部分一致検索を組み合わせる
SEARCH関数やワイルドカード(*)を使用することで、部分一致検索も可能です:
=INDEX(返値範囲,
MATCH(1,
(ISNUMBER(SEARCH("検索文字列",条件範囲1)))*(条件範囲2=検索値2),
0
)
)
エラー処理
検索条件に該当するデータが見つからない場合、#N/A エラーが返されます。これを防ぐには、IFERROR関数を使用します:
=IFERROR(
INDEX(返値範囲,
MATCH(1,
(条件範囲1=検索値1)*(条件範囲2=検索値2),
0
)
),
"該当なし"
)
パフォーマンスの考慮点
- データ量が多い場合は、検索範囲を必要最小限に絞る
- 可能な限り、数式を複製せず、1つの数式で処理する
- 頻繁に更新が必要な場合は、ヘルパー列の使用を検討する
まとめ
INDEX MATCH関数による複数条件検索は、以下のような利点があります:
- VLOOKUPよりも柔軟な検索が可能
- 左方向への検索も可能
- 複数の条件を組み合わせられる
- データの挿入・削除に強い
ただし、以下の点に注意が必要です:
- 配列数式として入力する必要がある
- 構文がやや複雑
- 大量データの場合はパフォーマンスに影響が出る可能性がある
これらの特徴を理解し、適切に使用することで、より効率的なExcelワークが可能になります。
コメント