XLOOKUP 複数条件の使い方

XLOOKUP 複数条件

結論:目的別・複数条件検索の最短ルート

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のバージョンによっては使えません。

関数使えるバージョン使えないバージョン
XLOOKUPMicrosoft 365、Excel 2021以降Excel 2019、Excel 2016以前
FILTERMicrosoft 365、Excel 2021以降Excel 2019、Excel 2016以前

Microsoft公式サポートも、XLOOKUPはExcel 2016およびExcel 2019では使用できないと明記しています(XLOOKUP 関数 – Microsoft サポート)。Excel 2019以前をお使いの場合は、記事後半の「旧バージョンExcelでの代替方法」へ進んでください。

XLOOKUP 複数条件 解説

 

サンプルデータ:この商品リストで解説します

以下の商品リストを使って、「カテゴリーがフルーツ」かつ「価格が100円以上150円以下」という2つの条件で検索してみます。条件に合うのはりんご(100円)とバナナ(150円)の2件です。この「該当が2件ある」状況が、XLOOKUPとFILTERの違いを理解するポイントになります。

ABCD
1商品コード商品名カテゴリー価格
2A001りんごフルーツ100
3A002バナナフルーツ150
4A003みかんフルーツ200
5A004にんじん野菜120
6A005ほうれん草野菜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以下?掛け算の結果
りんご1111
バナナ1111
みかん1100
にんじん0110
ほうれん草0100

すべての条件を満たす行だけが「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/AXLOOKUPで該当なし(第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を使い分ければ、検索まわりの作業時間は確実に短くなります。

編集長
古見遊 正

流通業で働きながら、2004年からWindowsを使い続けている80年代生まれのサラリーマン。ExcelとPowerPointを極め、仕事の効率化を追求中。苦手だったWordも克服中!Excelを使いこなせるだけで周囲から『神扱い』されるけれど、そのせいで『システムに詳しい人』だと勘違いされがち。でも、それが新しい知識を得るきっかけになった。そんな経験を活かして、Excel・PowerPoint・Word・Windowsの時短ワザ&仕事術を発信中!

古見遊 正をフォローする
Excel関数

コメント

タイトルとURLをコピーしました