INDEX+MATCHで複数条件検索|3つ以上もOKな数式の書き方

複数条件で 売上を探す。無料Excelサンプル付き。

INDEX+MATCHで複数条件を検索するには、条件ごとの比較を掛け算でつなぎ、すべて一致した行の「1」をMATCHで探します。返すのは最初に一致した1件です。条件に合う行を全部取り出す場合はFILTERを使います。

無料Excelサンプルで一緒に試す

日付・商品・地域・売上の例題入りです。G2の日付とG3の商品を変更し、検索結果を確認します。3条件の式は本文を参考に追加できます。

無料サンプルファイルをダウンロード(.xlsx)

Microsoft 365で利用できます。Excel 2019・2016向けの操作も本文で説明しています。

目次

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

INDEX関数とMATCH関数の基本(1条件の検索)

INDEX+MATCHの組み合わせは、2つの関数の役割を知ると読みやすくなります。MATCHは「探した値が範囲の何番目か」を返し、INDEXは「範囲の何番目の値か」を返します。

関数役割書式サンプルでの例
MATCH探した値が、範囲の何番目にあるか(位置)を返すMATCH(検索値, 検索範囲, 0)=MATCH("C商品",$B$2:$B$10,0) → 3
INDEX範囲の、何番目の値かを返すINDEX(範囲, 位置)=INDEX($D$2:$D$10,3) → 800

2つを組み合わせて、MATCHで見つけた位置をINDEXに渡すと、=INDEX($D$2:$D$10,MATCH("C商品",$B$2:$B$10,0))(800)のように値を取り出せます。ただし、条件が商品だけだと、最初に見つかった「C商品」(4/1)しか選べません。日付も合わせて指定するのが、次から説明する複数条件の検索です。

2条件で検索する基本式

サンプルはA2:A10が日付、B2:B10が商品、C2:C10が地域、D2:D10が売上です。G2に2024/4/1、G3にC商品を入力します。G2は文字列ではなくExcelの日付として入力してください。

F7に入力:日付と商品の2条件で検索
数式=INDEX($D$2:$D$10,MATCH(1,($A$2:$A$10=G2)*($B$2:$B$10=G3),0))
ひとことで日付と商品の両方が一致した行の売上を取り出す
$D$2:$D$10
取り出す売上の範囲です。INDEXは、この範囲の「何番目」かを指定して値を返します
$A$2:$A$10=G2
日付がG2と一致する行が TRUE(=1)になります
$B$2:$B$10=G3
商品がG3と一致する行が TRUE(=1)になります
MATCH(1,…,0)
2つを掛け算でつないだ結果が 1 になる行の位置を探します。最後の 0 は完全一致の指定です
データの流れ
① 条件(G2=4/1、G3=C商品)
G24/1G3C商品
▼
② 日付と商品の両方に一致する行だけが 1(黄色)
1番目4/1 | A商品 | 東京2番目4/1 | B商品 | 大阪3番目4/1 | C商品 | 福岡4番目4/2 | A商品 | 大阪5番目4/2 | B商品 | 東京6番目4/2 | C商品 | 名古屋7番目4/3 | A商品 | 福岡8番目4/3 | B商品 | 名古屋9番目4/3 | C商品 | 東京
▼
③ MATCHが位置「3」を返し、INDEXが売上の3番目を取り出す結果
MATCHの結果3F7800
ポイント結果は800です。MATCHの最後の0は完全一致の指定です。Microsoft 365・Excel 2024・2021ではEnterで確定します。旧Excelで配列計算が必要な場合はCtrl+Shift+Enterを使います。

掛け算で条件をつなぐ理由

TRUEとFALSEを掛け算すると1と0として計算されます。日付と商品の両方が一致する行だけ1になるため、MATCHで1を探せます。

日付一致商品一致積
TRUETRUE1
TRUEFALSE0
FALSETRUE0
ポイント範囲の3番目が一致した場合、MATCHは3を返します。シートの行番号ではなく、D2:D10の中の位置です。

3つ以上の条件に増やす方法(3条件の数式)

G4に地域を入力し、比較を1つ追加します。C商品・福岡・2024/4/1なら結果は800です。

F7に入力:日付・商品・地域の3条件で検索(G4に地域を入力)
数式=INDEX($D$2:$D$10,MATCH(1,($A$2:$A$10=G2)*($B$2:$B$10=G3)*($C$2:$C$10=G4),0))
ひとことで比較を * で1つ足すだけで、3つの条件がすべて一致した行を探す
$A$2:$A$10=G2
日付の条件です(2条件の式と同じ)
$B$2:$B$10=G3
商品の条件です(2条件の式と同じ)
$C$2:$C$10=G4
追加した地域の条件です。* でつなぐだけで、3つ以上の条件にも広げられます
データの流れ
① 条件(4/1、C商品、福岡)
G24/1G3C商品G4福岡
▼
② 3つとも一致する行だけが 1(黄色)
1番目4/1 | A商品 | 東京2番目4/1 | B商品 | 大阪3番目4/1 | C商品 | 福岡4番目4/2 | A商品 | 大阪5番目4/2 | B商品 | 東京6番目4/2 | C商品 | 名古屋7番目4/3 | A商品 | 福岡8番目4/3 | B商品 | 名古屋9番目4/3 | C商品 | 東京
▼
③ 位置「3」の売上を取り出す結果
F7800
注意検索範囲と戻り範囲はすべて2行目から10行目にそろえます。条件を増やしても、各範囲の開始行がずれていると別の行の値を返してしまいます。

見つからないときだけ表示を変える

見つからないときだけ「該当なし」と表示する
数式=IFNA(INDEX($D$2:$D$10,MATCH(1,($A$2:$A$10=G2)*($B$2:$B$10=G3),0)),"該当なし")
ひとことで#N/A のときだけ、別の文字に置き換える
INDEX(…MATCH(…))
2条件の検索の式です。一致する行がないと #N/A になります
"該当なし"
#N/A のときに表示する文字です
IFNA( … )
#N/A のときだけ置き換えます。#VALUE! や #REF! は置き換えません
補足複数一致がある場合、この式は合計せず、先頭の1件を返します。
注意IFNAは#N/Aを置き換えます。#VALUE!や#REF!まで隠す前に、範囲の長さや参照先を確認してください。複数一致がある場合、この式は合計せず先頭の1件を返します。

商品名の一部で検索する(部分一致を組み合わせる)

商品名を「C」のように一部だけで探したいときは、商品の比較を ISNUMBER(SEARCH()) に置き換えます。日付との掛け算はそのままです。

F13に入力:商品名の一部で検索する(部分一致)
数式=INDEX($D$2:$D$10,MATCH(1,($A$2:$A$10=G2)*ISNUMBER(SEARCH(G3,$B$2:$B$10)),0))
ひとことで商品の比較を ISNUMBER(SEARCH()) に置き換えると、一部の文字で探せる
$A$2:$A$10=G2
日付の条件です。そのまま * でつなぎます
ISNUMBER(SEARCH(G3,$B$2:$B$10))
商品名にG3の文字を含む行を TRUE にします。SEARCHは見つかると位置の数値、なければエラーを返し、ISNUMBERがそれを TRUE/FALSE にします
データの流れ
① 条件(G2=4/1、G3=「C」だけ)
G24/1G3C
▼
② 日付が合い、商品名に「C」を含む行(黄色)
1番目4/1 | A商品 | 東京2番目4/1 | B商品 | 大阪3番目4/1 | C商品 | 福岡4番目4/2 | A商品 | 大阪5番目4/2 | B商品 | 東京6番目4/2 | C商品 | 名古屋7番目4/3 | A商品 | 福岡8番目4/3 | B商品 | 名古屋9番目4/3 | C商品 | 東京
▼
③ その行の売上を取り出す結果
F13800
注意G3が空欄だと、SEARCHが全行に一致して、日付が合う先頭の行が返ります。SEARCHは大文字と小文字を区別せず、* と ? はワイルドカードとして扱われます。

XLOOKUPで部分一致を行う方法は、XLOOKUPの部分一致|ワイルドカードで前方・後方・含む検索で解説しています。

&で連結して検索する場合の注意(補助列とVLOOKUP)

注意A&Bだけでは「AB+C」と「A+BC」が同じABCになります。商品コードなどを連結するなら、元データに含まれない区切り文字を入れるか、本文のように条件ごとに比較します。旧Excelでは補助列で検索キーを作ると数式を追いやすくなります。
ポイントVLOOKUPでも補助列を使えば複数条件検索は可能です。「VLOOKUPでは複数条件を扱えない」と考える必要はありません。

結果が合わない・エラーになるときの確認順

  • 日付が数値、商品名が同じ文字列になっているか確認する。
  • 重複する条件がないか確認する。全件抽出と1件検索を分ける。
  • A:Aのような列全体の配列計算を避け、必要な行までに絞る。
ポイント複数行すべてを返すならFILTERによる複数条件抽出へ進んでください。

INDEX+MATCHの複数条件でよくある質問

条件が3つ以上でも使えますか?

使えます。比較を * で1つ足すごとに条件が増えます。検索範囲と戻り範囲は、すべて同じ行の範囲にそろえてください。詳しくは「3つ以上の条件に増やす方法」をご覧ください。

一致する行が複数あるときは、どうなりますか?

先頭の1件だけが返ります。合計はされません。条件に合う行をすべて取り出したいときは、FILTER関数による複数条件の抽出を使います。Excel 2019・2016ではINDEX+SMALLで複数一致を順に抽出する方法があります。

VLOOKUPでは複数条件を扱えませんか?

補助列で検索キーを作れば、VLOOKUPでも複数条件の検索ができます。ただし、連結する文字には、元データに含まれない区切り文字を使ってください。

Excel 2019・2016でも使えますか?

使えます。配列計算が必要な場合は、Enterではなく Ctrl+Shift+Enter で確定します。

日付を条件にするときの注意はありますか?

検索値のセル(G2)は、文字列ではなく、Excelの日付として入力してください。見た目が同じでも、文字列のままだと一致せず #N/A になります。

無料Excelサンプルで復習する

日付・商品・地域・売上の例題入りです。G2の日付とG3の商品を変更し、検索結果を確認します。3条件の式は本文を参考に追加できます。

無料サンプルファイルをダウンロード(.xlsx)

Microsoft 365で利用できます。Excel 2019・2016向けの操作も本文で説明しています。

あわせて読みたい:複数条件検索の関連記事

参考:Microsoft公式ドキュメント INDEX / MATCH / IFNA

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

この記事を書いた人

コメント

コメントする

目次