いきなり答える備忘録

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

(Gスプレッドシート)QUERY関数のIS NULLは空文字列をも抽出する

 GoogleスプレッドシートのQUERY関数では「WHERE ~ IS NULL」という表現が使えますが、これは空白セル(値がない)のほかに空文字列(長さ0の文字列)をも抽出します。その意味では「WHERE ~ =''」とするのと変わりません。

  • WHERE関数の「IS NULL」は空白セルだけでなく空文字列をも抽出します。

手順

f:id:accs2014:20201219113511p:plain:right:w500

 画像ではE2セルに下記の式を入力して、B2:C6の範囲にある表から条件にあてはまるものを(見出し列込みで)抽出しています。

 E2セル

=QUERY(B2:C6,"WHERE B IS NULL",1)

 抽出条件は「WHERE B IS NULL」となっているので、SQL的に考えれば空白セル(値がない)だけを抽出するように思えますが、実際は画像のように空文字列をも抽出します。
 

f:id:accs2014:20201219113515p:plain:right:w500

 こちらは条件を「WHERE B IS NOT NULL」とした結果です。
 やはり空文字列は抽出されず、長さ1以上の文字列だけが抽出されます。

 

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

 では空白セルだけを抽出するにはどうするかですが、条件だけで解決するのは難しい模様です。例えば「MATCHES '^$'」でも上記と同じ結果にしかなりません。
 例としては画像のようにして第1引数(データ範囲)に「空白セルかどうかの判定結果の列」を加える方法がありますが、式が長くなるのが難点です。

 E2セル

=QUERY({B2:C6,ARRAYFORMULA(ISBLANK(B2:B6))},"SELECT Col1,Col2 WHERE Col3=TRUE",1)