いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)FILTER関数で複数条件(AND,OR)を指定する

 GoogleスプレッドシートのFILTER関数で複数の条件を設けてAND条件(かつ)やOR条件(または)による抽出をする方法についてです。

  • 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つの列に対し多数の検索キーを設定する」という場合は、式を短くできる別の方法があります。詳しくは次の記事で紹介しています。

www.officeisyours.com

複合的な例

 式を組み合わせてさらに複雑な条件を置くこともできます。
 ここでは「『東京都であり、かつ、面積が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の組み合わせで同じ結果を得ることはできます)。

www.officeisyours.com

www.officeisyours.com