- AND抽出はそれぞれの条件をカンマで区切ることで可能です。それぞれの条件をカッコで囲み「*」で連結する方法もあります。
- OR抽出はそれぞれの条件をカッコで囲み「+」で連結することで可能です。
AND条件の例
次の画像では、B3:D11の範囲に都道府県、市区町村、面積のデータが記録されています。
これに対しF3セルにFILTER関数を使った式を入力して「千葉県であり、かつ、面積が50未満のもの(市区町村)」を抽出しています。
F3セル
=FILTER(B3:D11,B3:B11="千葉県",D3:D11<50)
FILTER関数では第2引数だけでなく第3引数以降も抽出条件とすることができ、それらはAND条件してはたらきます。
よってこの式により「千葉県であり、かつ、面積が50未満のもの」を抽出することができます。
また、次の画像は上記と全く同じAND検索を別の式により実行した結果です。
F3セルには次のように入力しています。
=FILTER(B3:D11,(B3:B11="千葉県")*(D3:D11<50))
第2引数に2つの式を詰め込んだ形になっています。
そしてそれぞれの式をカッコで囲み「*」でつないでいます。
これでも2つの条件のANDとして機能します。
なお、引数の中でも関数は使えますので、AND関数(OR検索の場合はOR関数)を使って中に2つの式を置く方法もありそうですが、残念ながらこれはエラーになります。
OR条件の例
次の画像ではF3セルにFILTER関数を使った式を入力して「千葉県であるか、または、面積が50未満であるもの(市区町村)」を抽出しています。
=FILTER(B3:D11,(B3:B11="千葉県")+(D3:D11<50))
第2引数に2つの式を詰め込み、それぞれの式をカッコで囲み「+」でつないでいます。
これは2つの条件のOR検索として機能します。
よってこの式により「千葉県であるか、または、面積が50未満であるもの(市区町村)」が抽出できます。
なお、同じOR検索でも「1つの列に対し多数の検索キーを設定する」という場合は、式を短くできる別の方法があります。詳しくは次の記事で紹介しています。
複合的な例
式を組み合わせてさらに複雑な条件を置くこともできます。
ここでは「『東京都であり、かつ、面積が50未満』または『面積が100以上』であるもの(市区町村)」を抽出しています。
F3セル
=FILTER(B3:D11,(B3:B11="東京都")*(D3:D11<50)+(D3:D11>=100))
「+」(OR)より「*」(AND)の方が優先的に解釈されますので、含まれている3つの条件式のうち最初の2つがまず結びつけられて1つの大きな条件を形成します。あとは3つ目の条件とのOR検索として機能するため、上記のような抽出内容となります。
なお、複数の式をさらにカッコで囲むとそちらが「*」よりも優先されます。
例は次のようになります。
=FILTER(B3:D11,(B3:B11="東京都")*((D3:D11<50)+(D3:D11>=100)))
この式は「『東京都であり』かつ『面積が50未満か、または、100以上』であるもの(市区町村)」を抽出します。よって「墨田区」の行だけを返します。
備考
AND/OR関数が使えない理由
いかにも使えそうなAND関数とOR関数が使えないのはFILTER関数の謎仕様かと思ってしまいますが、これには理由があります。
それはAND/OR関数が常に1つの論理値(TRUE/FALSE)しか返さないことです。SUM関数などと同様に、引数として広い範囲を指定しても1つの結果(値)しか返らないため、1つ1つの行を抽出するかどうか判断するための条件が得られません。
しかし「*」や「+」の場合は各行ごとの結果が得られますので、判断に必要な条件が得られるというわけです。
COUNTIF/SUMIF関数への応用
実はGoogleスプレッドシートのCOUNTIF関数とSUMIF関数の第1引数(範囲指定)では関数が使えるため、同じように複数条件の指定ができます。
特にOR条件は実用的で、多重カウント(集計)分を差し引くという面倒な作業が不要となり、3つ以上の条件にも容易に対応できます。
次の記事で詳しく紹介しています(ただしFILTER/ROWSやFILTER/SUMの組み合わせで同じ結果を得ることはできます)。