
結論:目的別・複数条件検索の最短ルート
Excelで「複数条件で検索したい」ときの正解は、取り出したい結果の数で決まります。まずはこの早見表で、自分のケースに合う方法を選んでください。
| やりたいこと | 使う方法 | 数式の型 |
|---|---|---|
| 複数条件に完全一致する1件を取り出す | XLOOKUP+文字列連結(&) | =XLOOKUP(条件1&条件2, 範囲1&範囲2, 戻り範囲, "該当なし") |
| 「〇〇以上△△以下」など範囲条件を含む1件を取り出す | XLOOKUP+条件の掛け算 | =XLOOKUP(1, (条件1)*(条件2), 戻り範囲, "該当なし") |
| 条件に合うすべてのデータを取り出す | FILTER関数(本命) | =FILTER(戻り範囲, (条件1)*(条件2), "該当なし") |
「複数条件で絞り込んだ結果を全部並べたい」なら、答えはXLOOKUPではなくFILTER関数です。XLOOKUPは仕様上、最初に見つかった1件しか返せません。この記事では、なぜXLOOKUPでは足りないのかを実例で確認しながら、3つの方法と旧バージョンExcelでの代替手段、つまずきやすいエラーの対処までを一気に解説します。
前提:対応バージョンを最初に確認
XLOOKUPとFILTERは比較的新しい関数のため、お使いのExcelのバージョンによっては使えません。
| 関数 | 使えるバージョン | 使えないバージョン |
|---|---|---|
| XLOOKUP | Microsoft 365、Excel 2021以降 | Excel 2019、Excel 2016以前 |
| FILTER | Microsoft 365、Excel 2021以降 | Excel 2019、Excel 2016以前 |
Microsoft公式サポートも、XLOOKUPはExcel 2016およびExcel 2019では使用できないと明記しています(XLOOKUP 関数 – Microsoft サポート)。Excel 2019以前をお使いの場合は、記事後半の「旧バージョンExcelでの代替方法」へ進んでください。

サンプルデータ:この商品リストで解説します
以下の商品リストを使って、「カテゴリーがフルーツ」かつ「価格が100円以上150円以下」という2つの条件で検索してみます。条件に合うのはりんご(100円)とバナナ(150円)の2件です。この「該当が2件ある」状況が、XLOOKUPとFILTERの違いを理解するポイントになります。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 商品コード | 商品名 | カテゴリー | 価格 |
| 2 | A001 | りんご | フルーツ | 100 |
| 3 | A002 | バナナ | フルーツ | 150 |
| 4 | A003 | みかん | フルーツ | 200 |
| 5 | A004 | にんじん | 野菜 | 120 |
| 6 | A005 | ほうれん草 | 野菜 | 180 |
方法1:XLOOKUP+「&」連結|完全一致の複数条件で1件だけ取り出す
「カテゴリーがフルーツ」かつ「価格がちょうど150円」のように、すべての条件が完全一致で、該当が1件に絞れる場合の定番はこの書き方です。
=XLOOKUP("フルーツ"&150, C2:C6&D2:D6, B2:B6, "該当なし")
結果:バナナ
仕組みはシンプルで、検索値と検索範囲の両方を「&」でつなぎ、複数の条件を1つの文字列に合体させてから検索しています。検索範囲側は「フルーツ100」「フルーツ150」「フルーツ200」…という連結文字列の配列になり、その中から「フルーツ150」を探している、というわけです。
注意:連結には区切り文字を入れるのが安全
単純な「&」連結には、異なる組み合わせが偶然同じ文字列になる落とし穴があります。たとえば「A1」&「23」と「A12」&「3」は、どちらも「A123」になってしまいます。実務では、データに登場しない記号を間に挟んでおくと安全です。
=XLOOKUP("フルーツ"&"|"&150, C2:C6&"|"&D2:D6, B2:B6, "該当なし")
また、この方法は文字列に変換してから照合するため、「100円以上」のような大小比較の条件には使えません。範囲条件が必要な場合は、次の方法2へ進んでください。
方法2:XLOOKUP+条件の掛け算|「以上・以下」を含む条件で1件取り出す
「100円以上150円以下」のような範囲条件を含める場合は、条件式を掛け算する書き方を使います。
=XLOOKUP(1, (C2:C6="フルーツ")*(D2:D6>=100)*(D2:D6<=150), B2:B6, "該当なし")
結果:りんご
仕組み:条件の掛け算で「1」の行を探している
それぞれの条件式は、行ごとにTRUE(=1)かFALSE(=0)を返します。
| 商品名 | フルーツ? | 100以上? | 150以下? | 掛け算の結果 |
|---|---|---|---|---|
| りんご | 1 | 1 | 1 | 1 |
| バナナ | 1 | 1 | 1 | 1 |
| みかん | 1 | 1 | 0 | 0 |
| にんじん | 0 | 1 | 1 | 0 |
| ほうれん草 | 0 | 1 | 0 | 0 |
すべての条件を満たす行だけが「1×1×1=1」となり、XLOOKUPは検索値「1」でその行を探し当てる、という理屈です。
ここが限界:該当は2件あるのに「りんご」しか返らない
上の表のとおり、掛け算の結果が「1」になる行はりんごとバナナの2行あります。ところが、XLOOKUPは最初に見つかった1件(りんご)だけを返し、バナナは結果に出てきません。これはエラーではなくXLOOKUPの仕様で、「1件だけ返す」関数である以上どうにもなりません。
「該当するデータを全部並べたい」——それが本当にやりたいことなら、使うべき関数はFILTERです。
方法3【本命】:FILTER関数|条件に合うすべてのデータを取り出す
FILTER関数を使えば、複数条件に一致するすべての行を一発で取り出せます。条件の書き方は方法2とまったく同じ「掛け算」なので、覚え直しは不要です。
=FILTER(B2:B6, (C2:C6="フルーツ")*(D2:D6>=100)*(D2:D6<=150), "該当なし")
結果:
- りんご
- バナナ
数式を入れたセルから下に向かって、該当する2件が自動的に並びます(この自動展開を「スピル」と呼びます)。Microsoft公式のFILTER関数解説でも、複数条件は乗算演算子(*)で組み合わせる方法が案内されています(FILTER 関数 – Microsoft サポート)。
行全体を取り出すこともできる
第1引数を表全体にすれば、商品コードから価格までの行まるごとを抽出できます。
=FILTER(A2:D6, (C2:C6="フルーツ")*(D2:D6>=100)*(D2:D6<=150), "該当なし")
OR条件(どちらかを満たす)は「+」で書く
「フルーツまたは180円以上」のように、いずれかの条件を満たすデータを取り出すときは、掛け算の代わりに足し算(+)を使います。
=FILTER(B2:B6, (C2:C6="フルーツ")+(D2:D6>=180), "該当なし")
AND条件は「*」、OR条件は「+」。この2つを覚えておけば、条件の組み合わせは自在です。
第3引数「該当なし」は省略しないのがコツ
FILTER関数の第3引数([空の場合])を省略すると、条件に合うデータが1件もないときに#CALC!エラーが表示されます。Excelが空の配列を返せない仕様のためで、Microsoft公式も第3引数の指定を対処法として案内しています(#CALC! エラーを修正する方法 – Microsoft サポート)。「””(空白)」か「”該当なし”」を必ず入れておく習慣にしておくと、エラーで慌てずに済みます。
旧バージョンExcel(2019/2016以前)での代替方法
XLOOKUPもFILTERも使えない環境では、標準機能の組み合わせで対応します。
1件だけ取り出す:作業列+INDEX・MATCH
表の右側(例:E列)に作業列を作り、条件に使う列を連結しておきます。
=C2&"|"&D2(E2に入力して下までコピー)
あとはこの作業列を検索するだけです。
=INDEX(B2:B6, MATCH("フルーツ|150", E2:E6, 0))
結果:バナナ
すべて取り出す:オートフィルターが最も確実
複数条件に合うデータを「全部」見たいだけなら、数式にこだわらずオートフィルター(データタブ→フィルター)でカテゴリーと価格を絞り込むのが、旧バージョンでは最も確実で速い方法です。抽出結果を別の場所に残したい場合は、絞り込んだ状態でコピー&貼り付けすれば完了です。
よくあるエラーと対処法
| エラー | 主な原因 | 対処法 |
|---|---|---|
| #CALC! | FILTERの条件に合うデータが0件(第3引数を省略している) | 第3引数に「””」や「”該当なし”」を指定する |
| #SPILL! | FILTERの結果を広げる先(下のセル)に既存データがある | 数式の下の範囲を空けるか、数式を空きの多い場所へ移動する |
| #N/A | XLOOKUPで該当なし(第4引数を省略している) | 第4引数[見つからない場合]に「”該当なし”」などを指定する |
| #VALUE! | 掛け算する条件式どうしの範囲の行数がズレている(例:C2:C6とD2:D7) | すべての条件式・戻り範囲の行数をそろえる |
| #NAME? | Excel 2019/2016以前でXLOOKUP・FILTERを入力した | 本記事の「旧バージョンExcelでの代替方法」を使う |
まとめ:迷ったらFILTER、1件ならXLOOKUP
- XLOOKUPの複数条件検索は「&連結」か「条件の掛け算」で可能。ただし返るのは最初の1件だけ
- 条件に合うデータをすべて取り出すならFILTER関数一択。AND条件は「*」、OR条件は「+」
- FILTERの第3引数「該当なし」は省略しない(#CALC!エラー防止)
- XLOOKUP・FILTERともMicrosoft 365/Excel 2021以降専用。2019以前は作業列+INDEX・MATCHやオートフィルターで代替
「複数条件で全部出したいのに1件しか出ない」というモヤモヤの正体は、関数の使い間違いではなく関数の選び間違いでした。目的に合わせてXLOOKUPとFILTERを使い分ければ、検索まわりの作業時間は確実に短くなります。












コメント