r001|Excelで「INDEXとMATCH」関数を使った「複数条件」検索の完全ガイド

目次

はじめに

VLOOKUPの代替として注目を集めている「INDEX」と「MATCH」関数。特に「複数条件」で検索する場合、その真価を発揮します。本記事では、「INDEX」と「MATCH」関数を使った「複数条件」検索について、基礎から応用まで詳しく解説します。

「INDEX+MATCH」関数の基本構造

まず、単一条件での基本的な使い方を確認しましょう。

=INDEX(返値範囲, MATCH(検索値, 検索範囲, 0))
  • INDEX関数:指定された範囲から特定の値を取り出す
  • MATCH関数:検索範囲内での検索値の位置(行番号または列番号)を返す

複数条件でのINDEX、MATCH関数の使用方法

複数条件を使用する場合は、MATCH関数を入れ子にします:

=INDEX(返値範囲,
    MATCH(1,
        (条件範囲1=検索値1)*(条件範囲2=検索値2),
        0
    )
)

重要なポイント

  1. 条件式をカッコでくくり、掛け算「*」で連結します
  2. MATCH関数の検索値として「1」を指定します

具体例で学ぶ|Excelで「INDEXとMATCH」関数を使った「複数条件」検索の完全ガイド

以下のような売上データを例に考えてみましょう:

表1:売上データ(A2:D10のセル範囲)

行/列ABCD
1日付商品地域売上
22024/4/1A商品東京1,000
32024/4/1B商品大阪1,500
42024/4/1C商品福岡800
52024/4/2A商品大阪1,200
62024/4/2B商品東京900
72024/4/2C商品名古屋1,100
82024/4/3A商品福岡1,300
92024/4/3B商品名古屋1,400
102024/4/3C商品東京950

検索条件入力セル

行/列FG
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

計算の流れ:

  1. 日付の一致チェック(A2:A10=G2)
    • 各行の日付と検索条件(2024/4/1)を比較
    • 最初の「3行」がTRUE(一致)
  2. 商品の一致チェック(B2:B10=G3)
    • 各行の商品と検索条件(C商品)を比較
    • 「3」,「6」,「9」行目がTRUE(一致)
  3. 条件の積の計算((A2:A10=G2)*(B2:B10=G3))
    • TRUEは1、FALSEは0として計算
    • 両方の条件が一致する行のみ「1」となる
    • この例では3行目のみが「1」
  4. MATCH関数で位置を特定
    • 1が見つかった最初の位置「3」を返す
  5. 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. データ量が多い場合は、検索範囲を必要最小限に絞る
  2. 可能な限り、数式を複製せず、1つの数式で処理する
  3. 頻繁に更新が必要な場合は、ヘルパー列の使用を検討する

まとめ

INDEX MATCH関数による複数条件検索は、以下のような利点があります:

  • VLOOKUPよりも柔軟な検索が可能
  • 左方向への検索も可能
  • 複数の条件を組み合わせられる
  • データの挿入・削除に強い

ただし、以下の点に注意が必要です:

  • 配列数式として入力する必要がある
  • 構文がやや複雑
  • 大量データの場合はパフォーマンスに影響が出る可能性がある

これらの特徴を理解し、適切に使用することで、より効率的なExcelワークが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次