「スプレッドシート上の膨大なデータから、特定の条件に合うものだけを瞬時に抜き出したい」
「複数の関数を組み合わせずに、もっとスマートにデータ集計がしたい」
複数の条件を組み合わせる際、数式が複雑になりがちなのが関数の悩みどころです。
そんな課題をスマートに解決してくれるのが、今回ご紹介するQUERY(クエリ)関数です。
QUERY関数は、まるでデータベースを操作するような感覚で、データの抽出、絞り込み、並べ替え、集計を自由自在に行える非常に強力な関数です。
この記事では、スプレッドシートの関数に少し慣れてきた初学者の方に向けて、QUERY関数の基本的な使い方から応用まで、実用的なサンプルデータを用いながら分かりやすく解説していきます。
一度使い方を覚えれば、あなたのデータ分析・資料作成のスピードを劇的に向上させてくれるでしょう。
QUERY関数とは?
QUERY関数とは、Googleスプレッドシートに用意されている関数の一つで、Google Visualization API のクエリ言語という、データベースに命令を出すための言語を使って、シート上のデータを操作できます。
少し難しく聞こえるかもしれませんが、要するに「指定した範囲のデータに対して、『この列だけ表示して』『この条件に合う行だけ抜き出して』『この順に並び替えて』といった命令を、一つの関数で完結できる」とイメージしてください。
これまでFILTER関数やSORT関数などを組み合わせて行っていた作業が、QUERY関数一つで、より直感的かつスピーディーに実現できるのです。
準備:QUERY関数を試すためのサンプルデータ
まずは、解説のために使用するサンプルデータを用意しましょう。
今回は、多くの企業で使われるであろう「営業案件管理リスト」を例にします。

QUERY関数の基本的な構文
QUERY関数は、3つの要素(引数)で構成されています。
=QUERY(
データ範囲,
クエリ,
[見出しの行数]
)
それぞれの引数が何を表しているのか、見ていきましょう。
- 第1引数:データ範囲
操作の対象となるデータが入力されているセル範囲を指定します。今回の例では A1:G11 となります。 - 第2引数:クエリ
どのような操作をしたいかを命令する部分です。QUERY関数の心臓部と言えます。
“SELECT A, B, F WHERE E = ‘受注'” のように、ダブルクォーテーション(”)で囲んで記述します。この命令文(クエリ言語)の書き方が、この関数の学習のポイントです。 - 第3引数:見出しの行数(省略可能)
データ範囲の先頭にある見出し行(ヘッダー)の数を指定します。通常は 1 を指定するか、省略します。省略した場合は、スプレッドシートが自動的に判断してくれます。
それでは、実際にクエリを記述しながら、基本的な使い方をマスターしていきましょう!
【基本編】これだけは覚えたい!主要なクエリ句の使い方
クエリは、SELECT や WHERE といった「句(く)」と呼ばれる命令を組み合わせて作成します。ここでは、最もよく使われる4つの句を解説します。
1. SELECT句:列を抽出する
SELECT句は、「どの列のデータを表示するか」を指定する命令です。
- すべての列を抽出する (*)
まずは、データ範囲のすべての列を抽出してみましょう。空いているセル(例えば I1セル)に、以下の関数を入力します。* は「すべて」を意味します。
=QUERY(
A1:G11,
"SELECT *"
)

- 特定の列だけを抽出する
次に、「顧客名(C列)」「ステータス(E列)」「受注金額(F列)」の3つの列だけを抜き出してみましょう。
=QUERY(
A1:G11,
"SELECT C, E, F"
)

- 列を入れ替えて抽出する
SELECT句で指定する列の順番を変えれば、元の表とは異なる順番で列を並べることも可能です。
=QUERY(
A1:G11,
"SELECT D, C, B"
)

2. WHERE句:行を絞り込む(条件指定)
WHERE句は、「どの行を表示するか」という条件を指定する命令です。FILTER関数の役割に相当します。
- 特定の文字列に一致する行を抽出する
「担当支社(B列)が ‘東京’ の案件」だけを絞り込みます。文字列はシングルクォーテーション(’)で囲むのがルールです。
=QUERY(
A1:G11,
"SELECT *
WHERE B = '東京'"
)

- 数値の条件で絞り込む(比較演算子)
「受注金額(F列)が100万円以上の案件」を抽出します。数値の比較には、=、>、<、>=、<=、<>といった比較演算子を使います。
=QUERY(
A1:G11,
"SELECT *
WHERE F >= 1000000"
)

- 複数の条件で絞り込む (AND, OR)
「担当支社(B列)が ‘東京’ かつ ステータス(E列)が ‘受注’ の案件」を抽出します。AND(~かつ~)やOR(~または~)で複数条件を指定できます。
=QUERY(
A1:G11,
"SELECT *
WHERE B = '東京'
AND E = '受注'"
)

3. ORDER BY句:並べ替える
ORDER BY句は、特定の列を基準にデータを並べ替える命令です。SORT関数の役割に相当します。
受注金額(F列)を基準に、金額の大きい順(降順)で並べ替えてみましょう。
- ASC:昇順(小さい順、A→Z順)。省略した場合は昇順になります。
- DESC:降順(大きい順、Z→A順)。
=QUERY(
A1:G11,
"SELECT *
WHERE E = '受注'
ORDER BY F DESC"
)

WHERE句はORDER BY句よりも先に書くというルールを覚えておきましょう。
4. LIMIT句:表示件数を制限する
LIMIT句は、表示する行数を制限する命令です。
例えば、「受注金額(F列)のトップ3案件」を表示したい場合、ORDER BY句と組み合わせて以下のように記述します。
=QUERY(
A1:G11,
"SELECT *
ORDER BY F DESC
LIMIT 3"
)
ORDER BYで大きい順に並べ替えた後、LIMIT 3で先頭から3行だけを表示しています。

【応用編】データ集計・加工をマスターする
QUERY関数は、単純な抽出だけでなく、データの集計や加工も得意です。ここでは、覚えておくと非常に便利な4つの句を紹介します。
1. GROUP BY句:グループ化して集計する
GROUP BY句は、特定の列の項目でデータをグループ化し、COUNT(個数)や SUM(合計)などの集計関数と組み合わせて使います。
- 支社ごとの案件数を数える (COUNT)
「担当支社(B列)ごとの案件数」を計算します。
=QUERY(
A1:G11,
"SELECT B, COUNT(C)
GROUP BY B"
)
これは、「担当支社(B列)でグループ分けし、それぞれのグループで顧客名(C列)の数を数えて表示する」という命令です。

- ステータスごとの合計金額を計算する (SUM)
「ステータス(E列)ごとの合計受注金額」を計算します。
=QUERY(
A1:G11,
"SELECT E, SUM(F)
GROUP BY E"
)

COUNTやSUMの他にも、以下のような集計関数がよく使われます。
主な集計関数 | 説明 |
COUNT() | データの個数を数える |
SUM() | 数値の合計を計算する |
AVG() | 数値の平均を計算する |
MAX() | 数値の最大値を求める |
MIN() | 数値の最小値を求める |
2. PIVOT句:クロス集計表を作成する
PIVOT句は、GROUP BY句と組み合わせることで、行と列を入れ替えたクロス集計表を作成できる非常に便利な機能です。
例えば、「担当支社(B列)ごと」の「ステータス(E列)別」の案件数を集計してみましょう。
=QUERY(
A1:G11,
"SELECT B, COUNT(C)
GROUP BY B
PIVOT E"
)
GROUP BY Bで指定した「担当支社」が縦軸に、PIVOT Eで指定した「ステータス」が横軸になり、それぞれのマスにCOUNT(C)(案件数)が表示されるクロス集計表が完成します。

3. LABEL句:見出し(ラベル)を変更する
GROUP BY句などで集計をすると、見出しが「count …」や「sum …」のように自動で設定されます。LABEL句を使うと、この見出しを分かりやすい日本語に変更できます。
=QUERY(
A1:G11,
"SELECT E, SUM(F)
GROUP BY E
LABEL SUM(F) '合計金額'"
)
LABEL句の後に「変更したい列」と「変更後の見出し名」を記述します。見出し名はシングルクォーテーション(’)で囲んでください。

4. FORMAT句:表示形式を変更する
FORMAT句を使うと、数値や日付の表示形式を整えることができます。先ほどの合計金額に、¥マークと桁区切りカンマを付けてみましょう。
=QUERY(
A1:G11,
"SELECT E, SUM(F)
GROUP BY E
LABEL SUM(F) '合計金額'
FORMAT SUM(F) '¥#,##0'"
)
FORMAT句の後に「書式設定したい列」と「書式パターン」を記述します。書式パターンはシングルクォーテーション(’)で囲んでください。

QUERY関数の注意点
QUERY関数は非常に強力ですが、利用する上でいくつか注意すべき点があります。
- 構文エラー
「#VALUE!」 や 「#N/A」 といったエラーが出た際は、構文が正しいか確認しましょう。特に、ダブルクォーテーション(”)や、シングルクォーテーション(’)の付け忘れはよくあるミスです。 - データ型の混在
1つの列に数値と文字列が混在していると、QUERY関数は多数派のデータ型のみを認識し、少数派は無視(null値として扱う)する特性があります。これが原因でうまく抽出できない場合があります。 - 動作の重さ
大量のデータを扱う場合や、複雑なクエリを実行する場合、シートの動作が重くなることがあります。特に、複数のQUERY関数を一つのシートで多用すると、再計算に時間がかかる可能性があるため注意が必要です。 - 並び替え(ORDER BY)の仕様
ORDER BY句による並び替えは、スプレッドシートのSORT関数と結果が異なる場合があります。特に、日本語の氏名や名称などを並び替える際に、意図しない順番(例:Unicode順)になることがある点を覚えておきましょう。
正確な五十音順での並び替えが必要な場合は、QUERY関数の結果をさらにSORT関数で並び替えるといった工夫が必要になるケースもあります。
まとめ
今回は、GoogleスプレッドシートのQUERY関数について、基本的な使い方から応用的な集計方法までを解説しました。
- SELECT で列を選び、
- WHERE で条件に合う行を絞り込み、
- ORDER BY で並べ替え、
- GROUP BY や PIVOT で集計・分析する。
これらの句を組み合わせることで、データ分析業務は格段に効率化されるはずです。これまで複数の関数を組み合わせて苦労していた作業も、QUERY関数ならスマートに、そして一つの数式で完結できます。
ぜひ、今回の記事を参考に、日々の業務でQUERY関数を活用してみてください!
※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。