📊

GoogleスプレッドシートでQUERY関数を使用した際に、一行目のセルに複数の情報が入ってしまう場合の対策

2022/03/18に公開

Google スプレッドシートで QUERY() 関数を使ってデータの参照をした場合に、以下のように1行目に複数の情報が入ってしまう場合があります。このメモではこれが起こる原因と、対策について共有します。

元データ(A1:C5にデータが有る):
2022-03-18_org.png

QUERY(A1:C5, "select *") で表示したデータ:
2022-03-18_out.png

対策のサマリ

この問題は、スプレッドシートが推定したヘッダの範囲が作成者が期待するものと異なることが原因で発生します。
そのため、QUERY() 関数の第3引数(見出し)によりヘッダの行数を明示的に指定し(10 にする)推定を排除することで、想定外の挙動を防止する対策が有効です。

ただし、選択範囲にヘッダが複数行(第3引数が2以上)含まれる場合、上述の現象が発生するのは仕様なので、選択範囲を調整して対応すると良いでしょう。

=QUERY(A3:C5, "select *", 0)

ポイント

  • QUERY() 関数の3番めの引数(見出し)により、QUERYで参照している範囲に何行のヘッダが含まれているか示すことができます。
  • 見出し 引数を指定しなかった場合、もしくは -1 を指定した場合はスプレッドシートは範囲を解析してヘッダの領域を推定します。この際、1行以上のヘッダがあるものと推定される場合があるようです。
  • 見出し 引数を 0 にした場合はヘッダがないものとして扱われるようです ⇐ この情報はヘルプなどにはあまり明示的に記載されていません。
  • ヘッダとして認識された領域は、QUERY() で参照した際に一行目に表示されます。
    この際、複数行のヘッダは1行に圧縮して表示されます ⇐ これが1行目に複数の情報が入ったデータができる原因
  • (関連)基本的に QUERY() では各列のデータ形式は統一されていることを想定していて、例えば列に数字と文字列が混在しているような場合は少数派の方が空欄(NULL値)で表示されるため、注意が必要です。

参考資料

本件のわかりやすい参考情報:

https://teratail.com/questions/123747

Googleの QUERY 関数のヘルプ:

https://support.google.com/docs/answer/3093343?hl=ja

関連する記事:

https://qiita.com/Shinoda_Naoki/items/d73e28a8a99fdc5ec1f5

Discussion