- AND検索はそれぞれの条件をカンマで区切ることで可能です。それぞれの条件をカッコで囲み「*」で連結する方法もあります。
- OR検索はそれぞれの条件をカッコで囲み「+」で連結することで可能です。
手順
AND検索
画像は結果です。
B3:D11の範囲に都道府県、市区町村、面積のデータが記録されています。
これに対し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(B3:D11,(B3:B11="千葉県")+(D3:D11<50))
第2引数に2つの式を詰め込み、それぞれの式をカッコで囲み「+」でつないでいます。
これは2つの条件のOR検索として機能します。
つまりこの式は「千葉県であるか、または、面積が50未満であるもの(市区町村)」を抽出します。
なお、同じOR検索でも「1つの列に対し多数の検索キーを設定する」という場合は、式を短くできる別の方法があります。詳しくは次の記事で紹介しています。
複合的な検索
式を組み合わせてさらに複雑な条件を置くこともできます。
ここではF3セルに次のように入力しています。
=FILTER(B3:D11,(B3:B11="東京都")*(D3:D11<50)+(D3:D11>=100))
この式は「『東京都であり、かつ、面積が50未満』または『面積が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つの結果しか返らないため、各行を抽出するかどうか判断するために必要な条件が得られません。
しかし「*」や「+」の場合は各行ごとの結果が得られますので、判断に必要な条件が得られるというわけです。