FILTER関数で複数条件を指定する方法|AND・ORの書き方と例

FILTER関数の複数条件|AND・ORの組み合わせを数式と具体例で解説

FILTER関数で複数条件を指定するには、「かつ(AND)」は *、「または(OR)」は + で条件式をつなぎます。両方を組み合わせるときは、ORのまとまり全体をかっこで囲むのがポイントです。

目次

複数条件の書き方を先に確認

抽出したい条件含む引数の形
条件1と条件2の両方に一致(条件1)*(条件2)
条件1か条件2のどちらかに一致(条件1)+(条件2)
条件1か条件2に一致し、さらに条件3に一致((条件1)+(条件2))*(条件3)
ポイントFILTERはMicrosoft 365・Excel 2024・2021で使用できます。Excel 2019・2016では使用できません。抽出結果は数式を入れたセルから隣接セルへ広がる「スピル」で表示されます。

同じサンプルでAND・ORを比較する

ポイントA1:C6に次の表を用意します。数式は元データと重ならないE2などの空きセルに入力してください。
行A:商品名B:販売価格C:カテゴリ
2商品A1500食品
3商品B800食品
4商品C2000家電
5商品D1200食品
6商品E3000家電

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

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

AND:食品かつ1,000円以上

E2に入力:AND(かつ)の条件で抽出する
数式=FILTER(A2:C6,(C2:C6="食品")*(B2:B6>=1000),"該当なし")
ひとことでカテゴリが食品で、かつ、販売価格が1,000円以上の行を取り出す
A2:C6
取り出す範囲です。商品名・販売価格・カテゴリの3列です
C2:C6="食品"
カテゴリが食品の行が TRUE になります
B2:B6>=1000
販売価格が1,000以上の行が TRUE になります
*
掛け算(AND)です。両方 TRUE の行だけが 1 になります
データの流れ
① 食品かつ1,000円以上の行
1,500円商品A1,200円商品D
▼
② E2から下へ、2行が広がる結果
E2商品AE3商品D
ポイント結果は商品A(1,500円)と商品D(1,200円)です。商品Bは食品ですが1,000円未満なので含まれません。商品C・Eは価格条件を満たしても、食品ではないため除外されます。
ポイントそれぞれの条件はTRUEまたはFALSEになります。掛け算ではTRUEが1、FALSEが0として扱われ、両方がTRUEの行だけ1になり抽出されます。

OR:1,000円未満または2,500円より高い

I2に入力:OR(または)の条件で抽出する
数式=FILTER(A2:C6,(B2:B6<1000)+(B2:B6>2500),"該当なし")
ひとことで1,000円未満、または、2,500円より高い行を取り出す
B2:B6<1000
1,000円未満の行が TRUE になります
B2:B6>2500
2,500円より高い行が TRUE になります
+
足し算(OR)です。どちらか一方でも TRUE なら、1以上になります
補足両方に一致して合計が2になる行も、抽出されます。同じ行が2回表示されるわけではありません。
ポイント結果は商品B(800円)と商品E(3,000円)です。どちらか一方を満たせば抽出されます。ORの両方に一致して合計が2になる行も抽出対象です。同じ行が2回表示されるわけではありません。

ANDとORを組み合わせる

「食品または家電」で、さらに「1,500円以上」を抽出します。

M2に入力:ANDとORを組み合わせる
数式=FILTER(A2:C6,((C2:C6="食品")+(C2:C6="家電"))*(B2:B6>=1500),"該当なし")
ひとことで「食品または家電」で、さらに「1,500円以上」の行を取り出す
(C2:C6="食品")+(C2:C6="家電")
OR部分です。足し算でつなぎ、かっこでひとまとまりにします
B2:B6>=1500
AND部分です。OR全体に、* でつなぎます
補足OR全体のかっこを外すと、掛け算が先に計算されて、「食品なら価格に関係なく抽出」という、別の条件になります。
ポイントこの例では商品A・C・Eが該当します。商品B・Dはカテゴリ条件を満たしますが、価格で除外されます。
注意OR全体のかっこを外すと、掛け算が先に計算されて「食品なら価格に関係なく抽出」という別の条件になってしまいます。数式を読むときは、まず「食品または家電」のまとまりを確認し、それに価格条件を掛けます。

条件をセルで切り替える

カテゴリをE1、最低価格をF1に入力するなら、次の式をE3などに入力します。

E3に入力:条件をセルで切り替える
数式=FILTER(A2:C6,(C2:C6=E1)*(B2:B6>=F1),"該当なし")
ひとことでカテゴリ(E1)と最低価格(F1)を書き換えるだけで、結果を変える
C2:C6=E1
カテゴリが、E1のセルと同じ行です。セル参照は、引用符で囲みません
B2:B6>=F1
販売価格が、F1のセル以上の行です。数値やセル参照は、引用符で囲みません
補足文字列を式に直接書くときだけ、”食品” のように、半角の二重引用符で囲みます。
ポイント文字列を式に直接書くときは "食品" のように半角の二重引用符で囲みます。セル参照のE1や、数値の1000は引用符で囲みません。

重複を除くにはUNIQUE、並べ替えにはSORT

食品のカテゴリ名ではなく、条件に合う商品名の重複を除きたい場合の例です。

I3に入力:条件に合う商品名の重複を除く
数式=UNIQUE(FILTER(A2:A6,(C2:C6="食品")*(B2:B6>=1000),"該当なし"))
ひとことでFILTERで取り出した商品名から、重複を除く
A2:A6
取り出す列です。商品名の列だけを指定します
UNIQUE(…)
同じ値を1つにまとめます。自動で並べ替える関数ではありません
補足UNIQUEを組み合わせても、参照範囲の不整合や、元データのエラーが、自動で直るわけではありません。
ポイントUNIQUEは重複を除きますが、自動で昇順に並べ替える関数ではありません。昇順にしたい場合はSORTで包みます。
M3に入力:重複を除いて、昇順に並べる
数式=SORT(UNIQUE(FILTER(A2:A6,(C2:C6="食品")*(B2:B6>=1000),"該当なし")))
ひとことでUNIQUEの外側を、SORTで包んで、昇順に並べ替える
SORT(…)
結果を昇順に並べ替えます。昇順にしたいときは、UNIQUEをSORTで包みます
補足並べ替えは、数値が先、文字列が後になります。
注意UNIQUEを組み合わせても、参照範囲の不整合や元データのエラーが自動で直るわけではありません。

FILTERがうまく動かないとき

症状確認すること
#NAME? / _xlfn. が表示されるFILTERに対応したExcelか
#SPILL!結果が広がる範囲に値や結合セルがないか。数式はテーブルの外へ置く
該当がないと#CALC!第3引数に "該当なし" や "" を指定したか
#VALUE!抽出範囲と条件範囲の行数がそろっているか
意図した行が出ないORのかっこ、数値と文字列の違い、末尾の空白を確認

AND(C2:C6="食品",B2:B6>=1000) のようにAND関数でまとめると、行ごとの判定を作る目的に合いません。FILTERの含む引数には、この記事の * や + を使って各行の結果を渡します。

ポイント結果を縦ではなく横に並べたい場合はFILTERとTRANSPOSEの組み合わせ、複数条件に合う1件だけを取得する場合はXLOOKUPとIFの使い分けへ進んでください。

仕様の確認:Microsoft公式・FILTER関数 / Microsoft公式・UNIQUE関数

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

この記事を書いた人

目次