GoogleスプレッドシートのQUERY関数の使い方|9つの句を全て実例付きで解説
「フィルターと集計とソートを一度にやりたい」「SUMIF・FILTER・SORTを3つ使い分けるのが面倒」そんなときに活躍するのがQUERY関数です。Googleスプレッドシート独自のこの関数は、SQLに似たクエリ言語で、データの絞り込み・並び替え・集計・整形をたった1つの関数でこなせます。この記事ではSELECTからFORMATまで全9句を、実例を交えながら初心者にわかりやすく解説します。
QUERY関数とは?
QUERY関数はGoogleスプレッドシート独自の強力な関数です。Googleが提供する「クエリ言語(Google Visualization API Query Language)」という命令文を使って、表データに対してさまざまな操作を一度に行えます。
- FILTER関数の代わりに:条件でデータを絞り込む
- SORT関数の代わりに:データを並び替える
- SUMIF・COUNTIF・AVERAGEIFの代わりに:条件付き集計
- さらに:行と列の入れ替え(PIVOT)、見出し変更、書式変換も可能
QUERY関数の書き方(構文)
=QUERY(データ, クエリ文字列, [見出し行数])
| 引数 | 説明 | 省略 |
|---|---|---|
| データ | 対象のセル範囲(例: A1:E100) | 必須 |
| クエリ文字列 | クエリ言語による命令文(例: “SELECT A, B WHERE C>100″) | 必須 |
| 見出し行数 | 先頭の見出し行の数(省略すると自動判定。通常は1を指定) | 省略可 |
句の正しい順序
QUERY関数で使える句は全部で9種類あり、必ずこの順序で書く必要があります(使わない句は省略可)。
SELECT → WHERE → GROUP BY → PIVOT → ORDER BY → LIMIT → OFFSET → LABEL → FORMAT
SELECT:表示する列を選ぶ
どの列を表示するかを指定します。列はA・B・C…のアルファベットで指定します(セル番地ではなく列記号)。
=QUERY(A1:E100, "SELECT A, B, C", 1)
全列を表示する場合は SELECT * と書きます。
=QUERY(A1:E100, "SELECT *", 1)
WHERE:条件でデータを絞り込む
特定の条件に一致する行だけを抽出します。
数値条件
=QUERY(A1:D100, "SELECT A, B WHERE C > 100", 1)
文字列条件(シングルクォートで囲む)
=QUERY(A1:D100, "SELECT A, B WHERE B = '東京'", 1)
WHEREで使える演算子・条件一覧
| 条件 | 書き方 | 使用例 |
|---|---|---|
| 等しい | = | WHERE B = ‘東京’ |
| 等しくない | != | WHERE B != ‘大阪’ |
| より大きい | > | WHERE C > 100 |
| 以上 | >= | WHERE C >= 100 |
| 含む | contains | WHERE B contains ‘東京’ |
| で始まる | starts with | WHERE B starts with ‘山’ |
| で終わる | ends with | WHERE B ends with ‘市’ |
| 正規表現 | matches | WHERE B matches ‘東京.*’ |
| かつ | and | WHERE C > 100 and B = ‘東京’ |
| または | or | WHERE B = ‘東京’ or B = ‘大阪’ |
| 空白 | is null | WHERE B is null |
| 空白以外 | is not null | WHERE B is not null |
セルの値を条件にする(セル参照)
=QUERY(A1:D100, "SELECT A, B WHERE B = '" & F1 & "'", 1)
ダブルクォートとシングルクォートを組み合わせ、&でセル参照を挟みます。F1の値が「東京」なら WHERE B = '東京' と同じ動作になります。
ORDER BY:並び替える
=QUERY(A1:D100, "SELECT A, B, C ORDER BY C DESC", 1)
| オプション | 意味 |
|---|---|
| ASC | 昇順(小→大)省略した場合の既定値 |
| DESC | 降順(大→小) |
複数列で並び替えるときはカンマで区切ります:
=QUERY(A1:D100, "SELECT A, B, C ORDER BY B ASC, C DESC", 1)
GROUP BY:グループ別に集計する
GROUP BY句と集計関数を組み合わせて、グループ別の合計・件数・平均などを求めます。
| 集計関数 | 内容 | 使用例 |
|---|---|---|
| SUM() | 合計 | SELECT A, SUM(C) GROUP BY A |
| COUNT() | 件数 | SELECT A, COUNT(B) GROUP BY A |
| AVG() | 平均 | SELECT A, AVG(C) GROUP BY A |
| MAX() | 最大値 | SELECT A, MAX(C) GROUP BY A |
| MIN() | 最小値 | SELECT A, MIN(C) GROUP BY A |
例:A列(部署)ごとにC列(売上)を合計する:
=QUERY(A1:D100, "SELECT A, SUM(C) GROUP BY A ORDER BY SUM(C) DESC", 1)
PIVOT:行データを列に変換する
PIVOT句を使うと、縦に並んだデータを横(列)方向に展開できます。クロス集計表の作成に便利です。
=QUERY(A1:C100, "SELECT A, SUM(C) GROUP BY A PIVOT B", 1)
例:A列が「担当者」、B列が「商品カテゴリ」、C列が「売上」のデータがある場合、担当者×カテゴリ別の売上マトリクスを1つの関数で作れます。
LIMIT・OFFSET:表示行数を制御する
LIMIT:上位N行だけ表示する
=QUERY(A1:C100, "SELECT A, B, C ORDER BY C DESC LIMIT 10", 1)
売上上位10件だけを表示するときなどに使います。
OFFSET:先頭N行をスキップする
=QUERY(A1:C100, "SELECT A, B, C LIMIT 10 OFFSET 5", 1)
先頭5行をスキップして次の10行を取得します。ページング処理や「2ページ目のデータ」を取り出すときに便利です。
LABEL:見出しの名前を変更する
集計関数を使うと自動生成される見出し(例: sum C)を、わかりやすい名前に変えられます。
=QUERY(A1:D100, "SELECT A, SUM(C) GROUP BY A LABEL A '部署名', SUM(C) '売上合計'", 1)
ラベルを空文字 '' にすると見出し行を非表示にできます。
FORMAT:日付・数値の書式を変える
DATE型・数値の表示形式を変換します。日付を「YYYY年MM月」形式で表示したいときなどに使います。
=QUERY(A1:C100, "SELECT A, B FORMAT B 'YYYY年MM月DD日'", 1)
=QUERY(A1:D100, "SELECT A, SUM(C) GROUP BY A FORMAT SUM(C) '#,##0円'", 1)
実践応用:複数の句を組み合わせる
実務では複数の句を組み合わせて使います。句は必ず正しい順序(SELECT→WHERE→GROUP BY→ORDER BY→LIMIT→LABEL)で記述してください。
=QUERY(A1:D100,
"SELECT A, SUM(C)
WHERE D = '東日本'
GROUP BY A
ORDER BY SUM(C) DESC
LIMIT 5
LABEL A '部署', SUM(C) '売上合計'",
1)
「東日本エリアの部署別売上合計・上位5部署を降順で表示し、見出しも日本語に変換」という処理を1つの関数で実現しています。
よくあるエラーと対処法
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE! | クエリ文字列の構文が間違っている | 句の順序・引用符・スペルを確認する |
| #N/A | 一致するデータが1件もない | WHERE条件を見直す |
| 結果が空白 | 列記号(A・B)ではなく列番号(1・2)を使っている | A・B・C形式のアルファベットで指定する |
| 文字列条件が効かない | 値をシングルクォートで囲んでいない | WHERE B = ‘東京’ のようにシングルクォートで囲む |
| セル参照が効かない | &での文字列結合ができていない | “…WHERE B = ‘” & F1 & “‘” の形式で記述する |
| 見出しが「sum C」になる | 集計関数使用時の自動見出し | LABEL句で任意の名前に変更する |
まとめ
QUERY関数の9つの句をまとめます。
| 句 | 役割 |
|---|---|
| SELECT | 表示する列を選ぶ |
| WHERE | 条件に一致する行だけ絞り込む |
| GROUP BY | グループ別に集計する(SUM・COUNT・AVG・MAX・MIN) |
| PIVOT | 縦データを横(列)方向に展開してクロス集計表を作る |
| ORDER BY | 昇順(ASC)または降順(DESC)で並び替える |
| LIMIT | 表示する行数を制限する(上位N件) |
| OFFSET | 先頭N行をスキップして表示する |
| LABEL | 列の見出しを任意の名前に変更する |
| FORMAT | 日付・数値の表示形式を変換する |
最初はSELECT・WHERE・ORDER BYの3つだけ使い始め、慣れたらGROUP BY・LABEL・FORMATと少しずつ機能を追加していくのがおすすめです。FILTER・SORT・SUMIF関数を複数使っていた処理が、QUERY関数1つにまとめられるケースも多いので、ぜひ活用してみてください。