Open4

スプレッドシートのQuery関数の挙動確認

umeru9umeru9

背景

スプレッドシートの一部をQuery関数で抽出したデータをGASでBigQueryに格納しようとしたときにカラム名に改行が入ってしまいエラーが発生していたので、具体的な挙動を確認して、解決方法を考える。

umeru9umeru9

発生していた問題

元テーブルに対して下記記述のQuery関数を適用したときに下記問題が発生

  • セルに改行が含まれてしまっている(もともとのエラー原因はこれ)
  • 具体的なuser_idやユーザー名がカラム名に含まれている

Query関数の内容

=QUERY(
'元データ'!A1:D12,
"select A, B, D where B='C'"
)

データ

※こちらのユーザー名はテストデータ・ジェネレータを利用して作成

元テーブル クエリ結果
umeru9umeru9

結論

解決したデータ

カラムに不要なデータが含まれておらず、セル内改行も解消している。

クエリ

  • ARRAYFORMULAを利用すると擬似的な範囲が返ってくるので A, Bなどの列名指定ができず、 Col1 ,Col2のような形に変換する必要がある。
  • 空白セルは空文字にはならないので is nullのような条件判定が利用可能
=QUERY(
ARRAYFORMULA(SUBSTITUTE('元データ'!A1:D12,CHAR(10),"")),
"select Col1, Col3, Col4 where Col2='C' and Col3 is null" ,
1
)

結果

umeru9umeru9

注意点

ARRAYFOMULA関数を利用するときは各セルが文字列として返ってくるためwhereの条件で日付の条件判定の方法が変わる。
具体的にはQuery関数では 日付カラム 比較演算子 date 'yyyy-mm-dd' の形式
参考:【QUERY関数】where句で日付データを条件にして行を抽出する | 隣IT

  =QUERY(
'元データ'!A1:D12,
"select A, B, D where C= date '2025-09-09'"
)

一方ARRAYFOMULAを利用した場合は、2025/09/09 のように直接文字列指定にする必要がある。
これは実際にセルに表示されている文字を指定するで大丈夫だと思う。

=QUERY(
ARRAYFORMULA(SUBSTITUTE('元データ'!A1:D12,CHAR(10),"")),
"select Col1, Col2, Col4 where Col3='C' and Col2='2025/09/09'" ,
1
)