notebook

都内でWEB系エンジニアやってます。

SpreadsheetのQUERYでヘッダを削除する

スプレッドシートで何かしらまとめたりしているとQUERYを使うことが多くなる

デフォルトだとヘッダ行も出力されるので、それだと使いづらいケースがある

それをなくして使いやすくする

結論

LABEL ${列の名前} ''

をQUERYの最後につける

まず普通に使った場合

こんな感じのデータがあったときに

I2のクエリの中身

=QUERY(A2:C5,"SELECT SUM(B)")

K2のクエリの中身

=QUERY(A1:C5,"SELECT SUM(B)")

データ範囲にヘッダ行を入れる入れないで多少出力がかわるが列名が表示され、QUERYの結果のデータが出力される

ヘッダ行を表示させない

データは先述と同じで少し条件を加え

nameごとのpriceの合計を出したいパターンで考える

例ではE列の値を検索の条件に含めてSUMした結果を表示させている

スクリーンショットのようにF2E2の値をもとに計算した数値、F3E3の値をもとに計算した数値を出力させることができる

F2のクエリの中身

=QUERY(A1:C5,"SELECT SUM(B) WHERE A = '"&E2&"' LABEL SUM(B) ''")

F3のクエリの中身

=QUERY(A1:C5,"SELECT SUM(B) WHERE A = '"&E3&"' LABEL SUM(B) ''")

LABEL SUM(B) ''

LABELはSQLで言うASのような役割

この部分でLABELに出力する文字列を指定している、空文字だとそもそも表示されずデータから表示される

F2F3では条件のセルの行数が違うだけ

おわり

例だとあまりメリットなくてGROUP BYで良いのでは? って感じになるが各行でVLookupより複雑なことをしたい場合(動的にクエリに条件入れたい)にこの使い方が活きる

まぁきれいかどうかは置いておくとして、詰まったときの選択肢としてあるとはかどる