いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)FILTER関数でのAND検索とOR検索

GoogleスプレッドシートのFILTER関数で複数の抽出条件を設けてAND検索やOR検索をする方法についてです。

手順

AND検索

f:id:accs2014:20200104134817p:plain:right:w650

 画像は結果です。
 B3:D11の範囲に都道府県、市区町村、面積のデータが記録されています。
 これに対しF3セルに次のように入力しています。

=FILTER(B3:D11,B3:B11="千葉県",D3:D11<50)

 FILTER関数では第2引数だけでなく第3引数以降も抽出条件とすることができ、それらはAND条件してはたらきます。
 よってこの式は「千葉県であり、かつ、面積が50未満のもの(市区町村)」を抽出します。
 

f:id:accs2014:20200104134822p:plain:right:w650

 また、これは上記と全く同じAND検索を別の式により実行した結果です。
 F3セルには次のように入力しています。

=FILTER(B3:D11,(B3:B11="千葉県")*(D3:D11<50))

 第2引数に2つの式を詰め込んだ形になっています。
 そしてそれぞれの式をカッコで囲み「*」でつないでいます。
 これでも2つの条件のAND検索として機能します。

 なお、引数の中でも関数は使えますので、AND関数(OR検索の場合はOR関数)を使って中に2つの式を置く方法もありそうですが、残念ながらこれはエラーになります

OR検索

f:id:accs2014:20200104134826p:plain:right:w650

 画像は結果です。
 F3セルには次のように入力しています。

=FILTER(B3:D11,(B3:B11="千葉県")+(D3:D11<50))

 第2引数に2つの式を詰め込み、それぞれの式をカッコで囲み「+」でつないでいます。
 これは2つの条件のOR検索として機能します。
 つまりこの式は「千葉県であるか、または、面積が50未満であるもの(市区町村)」を抽出します。

複合的な検索

f:id:accs2014:20200104134829p:plain:right:w650

 式を組み合わせてさらに複雑な条件を置くこともできます。

 ここでは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関数が常に単一の論理値(TRUE/FALSE)しか返さないことです。
 次の記事でAND関数と「*」演算子の比較と、さらにFILTER関数に適用した際の結果を比較を行っていますので参考まで。

www.officeisyours.com