いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)FILTER関数でワイルドカードを使った抽出をする

 GoogleスプレッドシートのFILTER関数では、基本的に抽出条件としてワイルドカードを使うことはできません。ワイルドカードを使う必要があればQUERY関数とLIKE句を使うのが本筋ですが、ここでは敢えてFILTER関数と他の関数と組み合わせてワイルドカードによる抽出をする方法を紹介します。

  • FILTER関数とCOUNTIFS関数を組み合わせて、ワイルドカードを使った抽出ができます。

手順

f:id:accs2014:20201129111301p:plain:right:w600

 画像ではB,C列に市町村名とそれぞれの面積が記録されています。
 E3セルに次のような式を入力し、市町村名が「~町」であるような行だけを抽出しています。

 E3セル

=FILTER(B3:C9,COUNTIFS(B3:B9,B3:B9,B3:B9,"*町"))

 FILTER関数の第2引数として、ワイルドカードが使えるCOUNTIFS関数を使っているところがポイントです。
 ここは「COUNTIF(B3:B9,"*町")」にした方が簡単なように見えるものの、COUNTIF関数だと数値が1個しか返ってこない(B3:B9にいくつ「~町」があるか、つまり「2」だけが返る)ため結果的にエラーになります。
 そこで「COUNTIFS(B3:B9,B3:B9,B3:B9,"*町")」としています。最初の条件が一見無駄な感じもしますが、、これにより各行に「~町」がいくつあるかをそれぞれカウントした結果が得られます({0;0;1;0;0;1;0})ので、結果的に行単位の抽出が可能となっています。
 なおCOUNTIFS関数の後に「>0」などと加えた方が親切ですが、結果に影響しないので省略しています。
 

f:id:accs2014:20201129111305p:plain:right:w600

 こちらの画像では「横???」というワイルドカードを使って、「横」の字で始まる4文字の市町村を抽出しています。

 E3セル

=FILTER(B3:C9,COUNTIFS(B3:B9,B3:B9,B3:B9,"横???"))