MENU
スポンサーリンク
スポンサーリンク
スポンサーリンク

QUERYで売上を集計するGoogleスプレッドシート活用術

当ページのリンクには広告が含まれています。
QUERYで売上を集計するGoogleスプレッドシート活用術

月次の売上表を前に、上司から「担当者ごとの合計だけすぐ出して」と言われて、どこから手を付ければいいか迷ったことはありませんか。
関数もピボットテーブルも何となく触ったことはあるけれど、思い通りに集計できずにシートがどんどん増えてしまう、という悩みも多いです。
こうした場面で役に立つのが、1つの関数で抽出も集計も並び替えもまとめて行える QUERY関数による集計 です。

この記事では、GoogleスプレッドシートのQUERY関数で集計するときの考え方と、すぐ試せる具体的な例をまとめて紹介します。
「まずはこれだけ押さえておけば、あとから応用しやすい」という順番で解説していきます。

この記事でわかること

・QUERY関数で集計するときの基本的な考え方
・代表的な3つの集計パターンと書き方
・実務で使いやすい条件付き集計の具体例
・結果がおかしいときのよくある原因と確認方法

目次

GoogleスプレッドシートでQUERY集計を始める前に

QUERY関数はとても自由度が高い一方で、前提を整理せずに書き始めると「なぜか動かない」と感じやすい関数です。
まずは、この記事全体の結論と、QUERY集計の全体像、そして使う前に確認しておきたいポイントを整理しておきます。

この記事の結論と読みどころ

この記事の結論は、QUERY関数で集計するときは「表を1つのテーブルとして見る」ことが出発点になる、ということです。
行や列をバラバラに見るのではなく、「どの列にどんな意味のデータが入っているか」を決めてから、必要な列だけを選び、条件を付けて絞り込み、必要ならグループ化して集計します。

実務では、SUMIFやピボットテーブルだけでは複雑になりがちな集計を、QUERY1本で整理しているケースが多いです。
例えば、「店舗×担当者×月」の売上を一度に出したいときなど、条件や集計軸が増えるほどQUERYの強みが生きてきます。

この記事では、特に次の3点に注目しながら読むと理解しやすくなります。

1つ目は、
QUERY関数の基本形と、よく使う句(select、where、group by、order by)の役割 です。
2つ目は、
代表的な3パターンの集計例を、そのまま応用しやすい形で覚えること です。
3つ目は、
結果がおかしいと感じたときに、どこから確認すればよいかというチェック順番 です。

QUERY集計の全体像と基本の考え方

QUERY関数は、ざっくり言うと「範囲(表)+クエリ文(SQL風の命令)+ヘッダー行の数」で構成されます。

書式は次のようになります。

=QUERY(範囲, "クエリ文", ヘッダー行数)

クエリ文の中では、次のような句を組み合わせて使います。

  • select:どの列を表示するか
  • where:どの行を条件で絞り込むか
  • group by:どの列でグループ化して集計するか
  • order by:どの列で並び替えるか

QUERY関数 は、selectやwhereなどの句を使って表形式データを柔軟に集計できる関数として定義されています(出典:Google Workspace公式ヘルプ)。

イメージとしては、
「A2:D100の表を1つのテーブルとして扱い、その中から必要な列と行だけを取り出し、必要に応じて集計する」
と考えると整理しやすいです。

QUERY集計のための準備と確認ポイント

QUERYで集計を始める前に、次の3点を確認しておくとトラブルを減らせます。

1つ目は、ヘッダー行が何行あるか です。
例えば、1行目が見出しで2行目からデータが始まる場合、ヘッダー行数は1になります。
この数値を誤ると、ヘッダーをデータとして扱ってしまい、結果がずれてしまいます。

2つ目は、範囲が途中で途切れていないか です。
売上の表で、金額の列だけ範囲に含め忘れてしまうと、selectで指定してもエラーや意図しない結果になります。
実務では、途中に空白列を挟んだり、別シートと結合したりすることが多いため、範囲指定のミスがよく起こります。

3つ目は、列ごとのデータ型が揃っているか です。
数字と文字列が混ざっている列、日付と文字列が混ざっている列では、集計結果が期待と違うことがあります。
「売上金額」の列にハイフンや記号が混じっていて、合計すると0になってしまう、といったケースはよく見られます。

どの方法で集計するか迷うときは、次のように判断すると整理しやすいです。

  • 単純な合計や平均だけなら SUMやAVERAGE
  • 条件が1つ2つで足りるなら SUMIF、COUNTIFなど
  • 条件や集計軸が多く、後から追加・変更する可能性が高いなら QUERY関数

「あとから集計軸を増やしそうかどうか」が、QUERYを使うかどうかの1つの判断基準になります。

QUERY関数でできる主な集計パターンと書き方

ここからは、QUERY関数でよく使われる3つの集計パターンと、その具体例を見ていきます。
どれも、売上表やタスク管理表などでそのまま使いやすい形を意識しています。

「何を集計したいのか」を先に決めてからパターンを選ぶと、式がすっきりしやすくなります。

代表的なQUERY集計パターン3つ

QUERY集計でよく使うパターンは、次の3つに分けられます。

1つ目は、列を絞るだけの「単純抽出」パターン です。
例として、A〜E列のうち「日付と担当者と金額だけ」を出したい場合は、次のようになります。

=QUERY(A1:E100, "select A, C, E", 1)

2つ目は、条件付きで絞り込みながら集計するパターン です。
例えば、ステータス列が「完了」の行だけを残したい場合は、次のように書きます。

=QUERY(A1:E100, "select * where D = '完了'", 1)

3つ目は、特定の列でグループ化して合計などを出す集計パターン です。
店舗ごとの売上合計を出したい場合は、次のようになります。

=QUERY(A1:C100, "select A, sum(C) group by A", 1)

日常的な業務では、これら3パターンの応用でかなりの集計ニーズをカバーできます。
「どの列を見たいか」「どんな条件で絞るか」「どの単位でまとめるか」を考えると、どのパターンを選ぶか判断しやすくなります。

条件付き集計の基本例

条件付き集計では、where句を使います。

例えば、次のような売上表を想像してください。

  • A列:日付
  • B列:担当者
  • C列:売上金額
  • D列:ステータス(完了/失注 など)

「完了になっている行だけの金額と担当者を一覧にしたい」という場合、式は次のようになります。

=QUERY(A1:D100, "select B, C where D = '完了'", 1)

会話のイメージとしては、

「この表から、完了した案件だけ見たいんだけど」
「じゃあ、where D = ‘完了’ を付けたQUERYにしましょう」

というやり取りになります。

複数の条件を組み合わせることもできます。
例えば、「担当者が田中さん」でかつ「ステータスが完了」の行だけにしたい場合は、次のように書けます。

=QUERY(A1:D100, "select B, C where B = '田中' and D = '完了'", 1)

条件付き集計を考えるときの判断基準は、次のようになります。

  • 条件が1つで、列も1つだけなら SUMIFなどの単純な関数
  • 条件が複数あり、表示したい列も複数あるなら QUERYのwhere句

特に、「条件は多いけれど、結果は1つの一覧にまとめたい」という場合はQUERYが向いています。

日付や期間で絞り込む集計例

日付で絞り込む集計は、売上やアクセスログなどでよく使われます。
日付は内部的に数値として扱われるため、比較の書き方に少し注意が必要です(出典:スプレッドシート関数リファレンス)。

例えば、「2024年1月1日以降のデータだけを集計したい」場合は、次のように書きます。

=QUERY(A1:D100, "select A, C where A >= date '2024-01-01'", 1)

「この1か月分だけ見たい」といった場面では、次のように期間を指定できます。

=QUERY(A1:D100, "select A, C where A >= date '2024-01-01' and A < date '2024-02-01'", 1)

実務では、

「今月分だけの売上合計が欲しい」
「四半期ごとの件数を比較したい」

といった依頼がよくあります。
こうしたとき、日付条件を組み合わせることで、同じ表から複数の期間を切り出して比較しやすくなります。

判断基準としては、

  • 期間が固定で、数パターンだけなら 別セルに開始日・終了日を置いてQUERYで参照する
  • 期間を頻繁に変えたいなら 日付セルと組み合わせて、式を使い回せるようにする

という考え方を取ると、後からの修正が楽になります。

データをグループ化して合計する例

グループ化は、特定の単位ごとの合計や件数を出したいときに使います。
代表的なのは「店舗ごとの売上合計」「担当者ごとの件数」などです。

次のような表を例にします。

  • A列:店舗名
  • B列:担当者
  • C列:売上金額

店舗ごとの売上合計を出したい場合は、次のように書きます。

=QUERY(A1:C100, "select A, sum(C) group by A", 1)

担当者ごとの件数を出したい場合は、次のようになります。

=QUERY(A1:C100, "select B, count(C) group by B", 1)

ここでのポイントは、集計関数(sumやcountなど)を使う列は、group byにも含めるか、集計関数を付ける必要がある という点です。
このルールを満たしていないとエラーになります(出典:Google Workspace公式ヘルプ)。

例えば、A列の店舗名でグループ化しながら、B列の担当者名もそのまま表示しようとすると、エラーになることがあります。
この場合は、担当者名でグループ化するか、別の方法で表現する必要があります。

判断基準としては、

  • 「○○ごとの合計・件数」が必要なら group byを使う
  • 一覧だけでよく、単純な合計だけなら SUMIFなどでも検討する

というイメージで考えると選びやすくなります。

目的別にQUERYパターンを選ぶ判断基準

「どのパターンを使えばよいか分からない」という声はよくあります。
そこで、目的別にQUERYパターンを選ぶときの考え方を整理します。

1つ目の基準は、「最終的に欲しい形が一覧か、集計表か」 です。
単に「条件に合う行を一覧で見たい」だけなら、単純抽出や条件付き抽出で十分なことが多いです。
一方、「担当者ごとの売上合計が欲しい」のように、まとまった表が必要な場合は、group byの集計パターンを選びます。

2つ目の基準は、「条件の数と組み合わせの複雑さ」 です。
条件が1つだけなら、ほかの関数でも対応できますが、

  • 担当者がAさん
  • ステータスが完了
  • かつ金額が1万円以上

といった条件が増えてくると、QUERYのwhere句の方が管理しやすくなります。

現場では、最初はSUMIFやフィルターで済ませていたものが、条件が増えるにつれてQUERYに移行するケースがよく見られます。
「条件や集計軸が増えそうだな」と感じた時点でQUERYに切り替えるのも、1つの判断基準になります。

3つ目の基準は、「式をどこまで1か所に集約したいか」 です。
複数のセルに関数を分散させるより、1つのQUERY関数でまとまった形にしておいた方が、後から見直す人にとって分かりやすい場合も多いです。

QUERY集計のよくあるつまずきと疑問

便利なQUERY関数ですが、実際に使い始めると「なぜか結果が変」「なぜかエラーが出る」という場面も出てきます。
ここでは、つまずきやすいポイントと、よくある疑問をまとめます。

結果がおかしいときに見直したいポイント

結果が「0になる」「行が少なすぎる」「列がずれている」といった場合、次の順番で確認すると原因を特定しやすくなります。

1つ目は、ヘッダー行数が合っているか です。
数値が大きすぎたり、1行目が結果に混ざっていたりする場合は、ヘッダー行数が実際の見出し行とズレていることが多いです。

2つ目は、where句の条件が厳しすぎないか です。
例えば、全角と半角のスペース違い、文字列の大小、日付の形式など、見た目が同じでも内部的には一致していないことがあります。

3つ目は、データ型が想定と違っていないか です。
数字として扱いたい列に文字列が混じっていると、合計を取っても0になったり、並び替えの順序がおかしくなったりします。

実務では、次のようなやり取りが起こりがちです。

「このQUERY、ちゃんと書いたはずなのに、行が全然返ってこないんですよね」
「whereの条件を一度外して、単純抽出にしてみましょう」

一度条件を外して結果を確認し、そこから条件を1つずつ足していくと、どこでおかしくなるかを特定しやすくなります。

実務で多いつまずきと対処例

実務でよくある、症状→原因→対処の例を2つ挙げます。

1つ目の例です。

  • 症状:金額の合計が0になる
  • 原因:金額の列が文字列として扱われている
  • 対処:該当列を選択し、「表示形式」で数値に揃えたうえでQUERYを実行する

2つ目の例です。

  • 症状:日付条件を付けると、データが1件も返らない
  • 原因:日付が文字列として入力されている、または日付の書式がバラバラ
  • 対処:日付列の形式を統一し、必要に応じてDATE関数などで正しい日付型に変換する

会話のイメージとしては、次のようなものです。

「なんでこの条件にすると、急に件数が0になるんでしょう」
「その列の書式を一度確認してみましょう。文字列扱いになっているかもしれません」

このように、結果がおかしいときは、まず書式やデータの揃い方を疑うのがポイントです。

よくある質問

Q.日本語の列名はそのままselectに書けますか
A.一般的には、列名ではなく Col1、Col2のような列番号表現 を使う方法が案内されています。
列名が変更されても式を修正しやすくなるというメリットもあります。

Q.QUERYとピボットテーブルはどちらを使うべきですか
A.ドラッグ操作中心で集計したい場合はピボットテーブルの方が直感的です。
一方、「同じ集計を他シートでも再利用したい」「条件を式で管理したい」といった場合は、QUERYの方が向いていることが多いです。

Q.別シートのデータもまとめてQUERYで集計できますか
A.できますが、一度IMPORTRANGEやARRAYFORMULAなどで1つの範囲にまとめてからQUERYをかける形が一般的です。
複数のシートを直接1つのQUERYで扱うより、構造をシンプルにしておくと管理しやすくなります。

Q.SQLを知らなくてもQUERYは使えますか
A.select、where、group byなど、基本的な句だけを覚えれば、簡単な集計なら十分扱えます。
実務では、よく使うパターンをテンプレートとして保存しておき、必要に応じて条件だけ変えて使い回しているケースが多いです。

GoogleスプレッドシートでQUERY関数集計を使う例のまとめ

・QUERY関数は表をSQL風に集計できる関数
・selectやwhereなどの句を組み合わせて使う
・ヘッダー行の行数は第3引数で指定する
・集計前に範囲やデータ型を確認しておく
・単純抽出は列をselectで指定して行う
・条件付き集計はwhere句で条件を書く
・日付条件はdate型として比較を行う
・group by句でカテゴリ別の合計を出せる
・order by句で並び替えまで一度に指定する
・SUMIFで足りない複雑な条件に向いている
・ピボットテーブルより式で管理しやすい
・目的別に3つの基本パターンを使い分ける
・結果が変なときはヘッダーと型を疑う
・日本語列はCol番号指定で安全に扱う
・小さく試してから本番の範囲に広げる

スポンサーリンク
スポンサーリンク
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次