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="田中")→ 同様に1か0の配列を返す*で掛け合わせると、両方の条件を同時に満たす行だけが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次元の表から値を取り出す方法」を解説予定です。行と列を同時に検索するテクニックを紹介します。