QUERY関数とは?Googleスプレッドシートで表を自由に抽出・集計できる便利関数

Googleスプレッドシートでデータを扱っていると、

  • 「特定の条件に合う行だけ表示したい」
  • 「必要な列だけ取り出したい」
  • 「売上順に並び替えたい」
  • 「担当者別に合計したい」

という場面がよくあります。

そんなときに便利なのが、QUERY 関数です。

QUERY 関数を使うと、表の中から必要なデータだけを取り出したり、条件で絞り込んだり、並び替えたり、集計したりできます。

少しだけSQLのような書き方をしますが、基本の形を覚えれば、かなり実務で使いやすい関数です。


QUERY関数の基本形

QUERY 関数の基本形は次のとおりです。

=QUERY(範囲, "クエリ文", 見出し行数)

たとえば、次のように使います。

=QUERY(A1:D100, "select A, B where C = '東京'", 1)

これは、A1:D100 の範囲から、C列が「東京」の行だけを抽出し、A列とB列だけを表示する式です。

それぞれの意味は次のとおりです。

引数内容
範囲対象にする表の範囲
クエリ文どの列を表示するか、どんな条件で絞るかを書く部分
見出し行数見出しが何行あるか。通常は 1

見出しが1行ある表なら、最後の引数は基本的に 1 で問題ありません。


サンプルの表

この記事では、次のような売上表を例にして説明します。

A列:日付B列:担当者C列:地域D列:売上
2026/5/1田中東京12000
2026/5/2佐藤大阪8000
2026/5/3田中東京15000
2026/5/4鈴木名古屋10000
2026/5/5佐藤東京18000

この表が A1:D に入っているものとして進めます。


必要な列だけ取り出す:select

QUERY 関数で最初に覚えたいのが select です。

select は、表示したい列を指定する命令です。

=QUERY(A1:D, "select A, B, D", 1)

この式では、A列、B列、D列だけを表示します。

つまり、元の表から「日付」「担当者」「売上」だけを取り出す形です。

すべての列を表示したい場合は、次のように書きます。

=QUERY(A1:D, "select *", 1)

* は「すべての列」という意味です。

まずは、

select *

select A, B, D

の違いを押さえるとわかりやすいです。


条件に合う行だけ取り出す:where

次に重要なのが where です。

where は、条件に合う行だけを表示するために使います。

たとえば、地域が「東京」の行だけを抽出したい場合は、次のように書きます。

=QUERY(A1:D, "select * where C = '東京'", 1)

C列が「東京」の行だけが表示されます。

文字列を条件にするときは、必ずシングルクォート ‘ ‘ で囲みます。

where C = '東京'

数値を条件にするときは、シングルクォートは不要です。

売上が10,000以上の行だけを表示するなら、次のようになります。

=QUERY(A1:D, "select * where D >= 10000", 1)

文字列はクォートあり、数値はクォートなし。

ここは最初につまずきやすいポイントです。


空白行を除外する

実務でとてもよく使うのが、空白行を除外する書き方です。

=QUERY(A1:D, "select * where A is not null", 1)

これは、A列が空白ではない行だけを表示する式です。

スプレッドシートでは、範囲を A1:D のように列全体で指定することが多いです。

そのままだと空白行まで対象になることがあるため、次のように書いておくと扱いやすくなります。

where A is not null

反対に、空白の行だけを取り出したい場合は、

where A is null

と書きます。


並び替える:order by

データを並び替えたいときは order by を使います。

売上の高い順に並び替えるなら、次のように書きます。

=QUERY(A1:D, "select * where A is not null order by D desc", 1)

desc は降順です。

売上が高い順、日付が新しい順などに使います。

反対に、昇順にしたい場合は asc を使います。

=QUERY(A1:D, "select * where A is not null order by D asc", 1)

asc は小さい順・古い順、desc は大きい順・新しい順と覚えるとよいです。


件数を制限する:limit

上位何件だけ表示したい、という場合は limit を使います。

売上が高い順に上位3件だけ表示するなら、次のように書きます。

=QUERY(A1:D, "select * where A is not null order by D desc limit 3", 1)

このように、order by と limit はセットで使うことが多いです。

たとえば、

order by D desc limit 5

と書けば、D列の値が大きい順に並べて、上位5件だけ表示できます。

ランキング表を作るときに便利です。


複数条件で絞り込む:and / or

条件を複数指定したい場合は、and や or を使います。

たとえば、地域が東京で、売上が10,000以上の行だけを表示したい場合は次のように書きます。

=QUERY(A1:D, "select * where C = '東京' and D >= 10000", 1)

and は「両方の条件を満たす」という意味です。

一方、東京または大阪の行を表示したい場合は or を使います。

=QUERY(A1:D, "select * where C = '東京' or C = '大阪'", 1)

条件が複雑になる場合は、括弧を使うとわかりやすくなります。

=QUERY(A1:D, "select * where (C = '東京' or C = '大阪') and D >= 10000", 1)

これは、地域が東京または大阪で、かつ売上が10,000以上の行を表示する式です。


文字を含む条件:contains

一部の文字を含むデータを探したい場合は contains を使います。

たとえば、担当者名に「田」を含む行を抽出する場合は、次のように書きます。

=QUERY(A1:D, "select * where B contains '田'", 1)

「田中」や「山田」などが該当します。

また、先頭一致なら starts with、末尾一致なら ends with を使います。

=QUERY(A1:D, "select * where B starts with '田'", 1)
=QUERY(A1:D, "select * where B ends with '中'", 1)

名前、商品名、カテゴリ名などを検索するときに便利です。


集計する:group by

QUERY 関数は、条件抽出だけでなく集計もできます。

たとえば、担当者ごとの売上合計を出したい場合は、次のように書きます。

=QUERY(A1:D, "select B, sum(D) where B is not null group by B", 1)

この式では、B列の担当者ごとに、D列の売上を合計しています。

地域ごとの売上合計なら、次のようになります。

=QUERY(A1:D, "select C, sum(D) where C is not null group by C", 1)

group by を使うときは、少し注意が必要です。

select に通常の列を指定した場合、その列は group by にも指定する必要があります。

たとえば、これはOKです。

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

しかし、これはエラーになります。

=QUERY(A1:D, "select B, C, sum(D) group by C", 1)

B列を select に入れているのに、group by に入っていないためです。

正しくはこうです。

=QUERY(A1:D, "select B, C, sum(D) group by B, C", 1)

group by を使うときは、「集計しない列は全部 group by に入れる」と覚えておくと安全です。


見出し名を変更する:label

集計をすると、見出しが sum 売上 のように少し読みにくくなることがあります。

そんなときは label を使って、見出し名を変更できます。

=QUERY(A1:D, "select C, sum(D) group by C label sum(D) '売上合計'", 1)

さらに、C列の見出しも変えるなら次のように書きます。

=QUERY(A1:D, "select C, sum(D) group by C label C '地域', sum(D) '売上合計'", 1)

集計表をそのまま資料やダッシュボードに使いたい場合、label まで設定しておくと見やすくなります。


日付条件の書き方

QUERY 関数で日付を扱うときは、少し独特な書き方をします。

たとえば、2026年5月1日以降のデータだけを抽出する場合は、次のように書きます。

=QUERY(A1:D, "select * where A >= date '2026-05-01'", 1)

日付は、

date 'YYYY-MM-DD'

の形で指定します。

スプレッドシート上では 2026/5/1 と表示されていても、QUERY関数の中では 2026-05-01 の形にする必要があります。

セルに入力した日付を条件にしたい場合は、TEXT 関数と組み合わせます。

たとえば、F1セルに開始日が入っている場合は次のように書きます。

=QUERY(A1:D, "select * where A >= date '"&TEXT(F1, "yyyy-mm-dd")&"'", 1)

この式は少し長く見えますが、実務ではかなりよく使います。


セル参照を使って条件を変える

QUERY 関数は、セル参照と組み合わせると一気に便利になります。

たとえば、F1セルに地域名を入力し、その地域のデータだけを表示したい場合は、次のように書きます。

=QUERY(A1:D, "select * where C = '"&F1&"'", 1)

F1に「東京」と入力すれば東京だけ、F1に「大阪」と入力すれば大阪だけ表示されます。

売上の下限をF1セルで指定する場合は、次のようになります。

=QUERY(A1:D, "select * where D >= "&F1, 1)

文字列をセル参照する場合は、前後にシングルクォートが必要です。

"where C = '"&F1&"'"

数値をセル参照する場合は、シングルクォートは不要です。

"where D >= "&F1

この違いを覚えると、検索フォームのようなシートを作れるようになります。


配列を使う場合は Col1, Col2 形式になる

通常の範囲指定では、列を A, B, C のように指定します。

=QUERY(A1:D, "select A, B, D", 1)

しかし、{} を使って配列を作った場合は、列指定が Col1, Col2, Col3 の形式になります。

=QUERY({A1:D}, "select Col1, Col2, Col4", 1)

複数の表を縦に結合する場合も同じです。

=QUERY({A1:D; F1:I}, "select Col1, Col2, Col4 where Col3 = '東京'", 1)

この違いは、エラーの原因になりやすいです。

通常範囲なら A, B, C。
配列なら Col1, Col2, Col3。

ここはセットで覚えておきましょう。


よく使うQUERY関数のテンプレート

ここからは、実務で使いやすいテンプレートをまとめます。

空白行を除外して表示する

=QUERY(A1:D, "select * where A is not null", 1)

特定の地域だけ抽出する

=QUERY(A1:D, "select * where C = '東京'", 1)

売上が10,000以上の行だけ抽出する

=QUERY(A1:D, "select * where D >= 10000", 1)

売上の高い順に並び替える

=QUERY(A1:D, "select * where A is not null order by D desc", 1)

売上上位5件を表示する

=QUERY(A1:D, "select * where A is not null order by D desc limit 5", 1)

担当者ごとの売上合計を出す

=QUERY(A1:D, "select B, sum(D) where B is not null group by B label sum(D) '売上合計'", 1)

地域ごとの平均売上を出す

=QUERY(A1:D, "select C, avg(D) where C is not null group by C label avg(D) '平均売上'", 1)

地域ごとの件数を出す

=QUERY(A1:D, "select C, count(C) where C is not null group by C label count(C) '件数'", 1)

QUERY関数でよくあるエラー

PARSE_ERROR

PARSE_ERROR は、クエリ文の書き方にミスがあるときに出ます。

特に多いのは、文字列をシングルクォートで囲んでいないケースです。

これはエラーになります。

=QUERY(A1:D, "select * where C = 東京", 1)

正しくはこうです。

=QUERY(A1:D, "select * where C = '東京'", 1)

NO_COLUMN

NO_COLUMN: A のようなエラーが出る場合は、列指定が合っていない可能性があります。

たとえば、配列 {} を使っているのに A や B で指定しているとエラーになります。

=QUERY({A1:D}, "select A, B", 1)

この場合は、次のように Col1, Col2 を使います。

=QUERY({A1:D}, "select Col1, Col2", 1)

日付条件で抽出できない

日付条件では、date ‘YYYY-MM-DD’ の形を使います。

=QUERY(A1:D, "select * where A >= date '2026-05-01'", 1)

セルの日付を使う場合は、TEXT 関数で形式を整えます。

=QUERY(A1:D, "select * where A >= date '"&TEXT(F1,"yyyy-mm-dd")&"'", 1)

QUERY関数を覚える順番

QUERY関数は一度にすべて覚えようとすると、少し難しく感じます。

まずは、次の順番で覚えるのがおすすめです。

  1. select で列を選ぶ
  2. where で条件を指定する
  3. order by で並び替える
  4. limit で件数を絞る
  5. group by で集計する
  6. label で見出しを整える
  7. セル参照と組み合わせる
  8. 日付条件を使う
  9. 配列の Col1 形式を理解する

最初は、次の式を覚えるだけでも十分実用的です。

=QUERY(A1:D, "select * where A is not null", 1)

この式をベースに、条件を足したり、並び替えを追加したりしていくと理解しやすくなります。


まとめ

QUERY 関数は、Googleスプレッドシートの中でもかなり強力な関数です。

  • 必要な列だけ取り出す。
  • 条件に合う行だけ表示する。
  • 売上順に並び替える。
  • 担当者別や地域別に集計する。
  • セル参照と組み合わせて検索表を作る。

こうした処理を、ひとつの関数でまとめて実現できます。

最初はクエリ文の書き方に少し慣れが必要ですが、基本はそれほど複雑ではありません。

まずは、

=QUERY(A1:D, "select * where A is not null", 1)

から始めて、少しずつ where、order by、group by を足していくのがおすすめです。

QUERY関数を使えるようになると、スプレッドシートでのデータ整理や集計がかなり楽になります。