doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

ExcelのINDEX・MATCHで複数条件を検索する方法【コピペ用数式あり】

スポンサーリンク


ExcelのINDEX・MATCHで複数条件を検索する方法【コピペ用数式あり】

「VLOOKUPで複数条件の検索をしようとしたら、うまくいかなかった…」

そんな経験はありませんか?たとえば「営業部にも総務部にも『田中』さんがいて、営業部の田中さんのデータだけ取り出したい」というケース。VLOOKUPでは1列しか検索キーにできないため、こうした場面で行き詰まりがちです。

解決策は INDEX関数とMATCH関数の組み合わせです。この記事を読めば、複数条件での検索数式をすぐに自分のデータへ応用できるようになります。コピペして使える数式例もまとめているので、ぜひ手元のExcelで試しながら読み進めてください。


INDEX・MATCHの基本をおさらい

まず土台を確認しておきましょう。

  • INDEX関数:指定した範囲から「○行目・○列目」の値を返す
  • MATCH関数:指定した値が範囲の何番目にあるかを返す

この2つを組み合わせた基本構文はこちらです。

=INDEX(返したい範囲, MATCH(検索値, 検索範囲, 0))

VLOOKUPと違い「左端の列でしか検索できない」という制約がないため、より柔軟な検索が可能です。


複数条件をAND(かつ)で指定する方法

複数条件を組み合わせるには、MATCH関数の中で配列を使い条件を *(掛け算)でAND結合します。

サンプルデータ

部署 氏名 売上
営業部 田中 500
総務部 田中 300
営業部 鈴木 700
総務部 鈴木 420
営業部 佐藤 610
総務部 佐藤 280

「田中」が営業部・総務部の両方に存在するのがポイントです。1列だけで検索すると誤ったデータを拾ってしまいます。

基本の数式

=INDEX(C2:C7, MATCH(1, (A2:A7="営業部")*(B2:B7="田中"), 0))

入力後の確定方法はExcelのバージョンで異なります。

バージョン 確定方法
Excel 2019以前 Ctrl + Shift + Enter(配列数式)
Microsoft 365 / Excel 2021以降 EnterのみでOK(スピル対応)

旧バージョンで Ctrl+Shift+Enter を使うと、数式バーに {=INDEX(...)} のように波括弧が付きます。これが配列数式として正しく登録されたサインです。

仕組みを理解しよう

  • (A2:A7="営業部") → 条件を満たす行は 1、それ以外は 0 の配列を返す
  • (B2:B7="田中") → 同様に 10 の配列を返す
  • * で掛け合わせると、両方の条件を同時に満たす行だけが 1 になる
  • MATCH(1, ..., 0) でその 1 の位置(行番号)を特定
  • INDEX でその行の売上を返す

エラー対策:IFERRORと組み合わせる

条件に一致するデータが存在しない場合、#N/A エラーが表示されます。実務では IFERROR でラップしておくと安心です。

=IFERROR(INDEX(C2:C7, MATCH(1, (A2:A7="営業部")*(B2:B7="田中"), 0)), "該当なし")

条件をセル参照にして汎用的に使う

条件を数式に直書きすると、変更のたびに数式を編集しなければなりません。条件をセルに入力して参照する形にすると、再利用性が格段に上がります。

セル 内容
F1 営業部
F2 田中
=IFERROR(INDEX(C2:C7, MATCH(1, (A2:A7=F1)*(B2:B7=F2), 0)), "該当なし")

F1・F2 の値を変えるだけで検索対象を切り替えられます。ダッシュボードや入力フォームと組み合わせると特に便利です。


3つ以上の条件を追加する

条件を増やすには、* でさらに条件を繋げるだけです。構造は変わりません。

「営業部」かつ「田中」かつ「2024年」の売上を取得する例

=IFERROR(INDEX(D2:D10, MATCH(1, (A2:A10="営業部")*(B2:B10="田中")*(C2:C10=2024), 0)), "該当なし")

どれだけ条件が増えても *(列範囲=条件) を追加するだけなので、覚えてしまえば応用は簡単です。


OR条件(「または」)を指定したい場合

「営業部またはマーケティング部の田中さん」のように OR 条件を使いたい場面もあります。その場合は *(AND)の代わりに +(加算)を使います。

=IFERROR(INDEX(C2:C7, MATCH(1, ((A2:A7="営業部")+(A2:A7="マーケティング部"))*(B2:B7="田中"), 0)), "該当なし")

+ で繋いだ部分は「どちらかが1であれば合計が1以上になる」ことでOR条件を表現します。ただし、複雑なOR条件が増える場合はXLOOKUP(Microsoft 365)やFILTER関数の使用も検討しましょう。


よくあるエラーと対処法

#N/A が表示される

  • 条件に一致するデータが存在しない
  • 検索値とデータの表記がずれている(全角・半角、スペースの有無など)
  • 旧バージョンで Ctrl+Shift+Enter を忘れている({} が付いているか確認)

意図しない行のデータが返ってくる

  • 検索範囲とINDEXの範囲の行数がずれていないか確認する
  • 複数行が条件を満たす場合、最初に一致した行のデータが返る(仕様)。全件取得したい場合はFILTER関数が適している

まとめ

INDEX・MATCHで複数条件を扱うときの要点を整理します。

ポイント 内容
AND条件の基本構造 MATCH(1, (条件1)*(条件2), 0)
OR条件 * の代わりに + を使う
旧バージョンの確定 Ctrl+Shift+Enter で配列数式として登録
新バージョンの確定 Enter のみでOK(スピル対応)
条件の追加 *(列範囲=条件) を繋げるだけ
エラー対策 IFERROR で囲む
汎用化 条件をセル参照にして動的に切り替える

VLOOKUPでは対応できない複数条件の検索も、INDEX・MATCHなら * を使うシンプルな構造で解決できます。古いバージョンのExcelでも使える手法なので、ぜひ一度自分のデータに当てはめて試してみてください。


次回は「INDEX・MATCHで2次元の表から値を取り出す方法」を解説予定です。行と列を同時に検索するテクニックを紹介します。