GoogleスプレッドシートのQUERYで結果の先頭行が「列名」や空白になるときは、QUERY関数の第3引数「見出し行数」と、返された見出しの扱いを確認します。式を直す前に、元表の何行目が見出しかを確定させます。

QUERYの見出し行の解釈を確認

  • 対象データの1行目が項目名か、実データか確認します。
  • QUERYの第3引数が省略され、自動推定になっていないか調べます。
  • select Col1, Col2のような列参照方式と通常のA,B方式を混同していないか確認します。
  • label句で出力見出しを書き換えているかも確認します。

QUERYのheaders引数を明示する

  1. 元データを別シートに保護してから数式を複製します。
  2. 見出しが1行あるデータなら =QUERY(A1:C100,"select A,B",1) のように見出し行数を指定します。
  3. 見出しなしの配列データなら最後の引数を0にするなど、実際の範囲に合わせます。
  4. 出力見出しを変えたい場合は label句で必要な列名を指定します。
  5. 行が減る・増える操作をして、集計データの先頭行が正しいか確認します。

列名とデータ行の混同を防ぐ

  • 第3引数を適当に0へ変えると見出しをデータとして集計する場合があります。
  • 集計関数を使う式では出力の列ラベルも変わるので、単純な列選択と同じには扱えません。
  • 元表の列を途中に追加すると参照列が変わる可能性があるため、更新後に式を点検します。

抽出結果の1行目を照合する

  • 結果の見出し、最初の実データ、最後の行の3点を元表と比べます。
  • 「行数は合うが列名だけ違う」なら、見出しのラベル調整だけでよい場合があります。

見出しの推測をやめる具体例

元表のA1:C4が「日付|担当|金額」という1行の見出しと3行の明細で構成されているなら、 =QUERY(A1:C4,"select A,B,C",1) のように第3引数を 1 と明示します。元表がすべて明細行で見出しを含まない場合は 0 にします。第3引数を省略すると、Google Sheetsが見出し行数を推測するため、データの内容が変わったときに扱いが揺れる余地があります。

元表の見出し行数と、QUERYの結果に表示させたい見出し文字は別です。結果の見出しを指定したいなら、例えば =QUERY(A1:C4,"select A,sum(C) group by A label sum(C) '売上合計'",1) とし、集計列に付くラベルを label 句で指定できます。サンプルではA列が集計単位、C列が数値である必要があります。

「列名が勝手に変わった」以外の落とし穴

QUERYで数値と文字列を同じ列に混ぜると、列の型の多数派によって少数側がNULL扱いになる場合があります。行が抜けたように見えるケースでは、見出し行数だけを変更しても解決しません。列の型、集計条件、元表の入力ゆれを先に見直します。また Col1 参照と A 参照はデータの指定方法によって使い分けるため、他サイトの式を丸写しする場合は参照範囲も同時に確認してください。

参考資料

おすすめの記事