スプレッドシートの作業効率を劇的に変える「最強関数」をゼロから習得
Googleスプレッドシートで大量のデータを扱うとき、「特定の列だけを取り出したい」「条件に合う行だけを抽出したい」「売上順に並び替えて上位だけを表示したい」という場面は日常茶飯事です。
これらを通常の関数(FILTER、SORT、VLOOKUPなど)でやろうとすると、関数を何重にも組み合わせたり、数式が複雑化して管理が大変になります。
そんな悩みをたった1つの数式でスマートに解決してくれるのが「QUERY(クエリ)関数」です。
本記事では、QUERY関数の基本構造から主要な句(SELECT、WHERE、ORDER BYなど)の使い方、実務で役立つ具体的なサンプル数式まで、初心者の方にも分かりやすく丁寧に解説します。
QUERY関数とは?なぜ最強と呼ばれるのか
QUERY関数とは、Googleスプレッドシート独自の強力な関数で、データベースを操作する言語「SQL(エスキューエル)」に似た命令文を使って、表データを自由自在に抽出・並び替え・集計できる機能です。
一般的な表計算の作業では、次のような複数の処理を別々の関数や手作業で行う必要があります。
- 必要な列だけを抜き出す(列の並び替え)
- 特定の条件に合致するデータだけをフィルタリングする(行の絞り込み)
- 金額や日付の順番で並び替える(ソート)
- 上位5件だけを表示する(件数制限)
- 担当者別や月別に合計を計算する(グループ集計)
QUERY関数を使えば、これら全ての処理を「たった1つの数式の中」に英語の文のような形式でまとめて記述できます。
さらに、元データが更新されたり行が追加されたりしても、結果の表へリアルタイムに自動反映されるため、業務の自動化に欠かせない必須スキルとなっています。
QUERY関数の基本構文と3つの引数
QUERY関数の基本的な書き方はとてもシンプルです。
=QUERY(データ, クエリ, [見出し])
| 引数 | 指定する内容 | 実務での指定例・注意点 |
|---|---|---|
| 第1引数:データ | 参照元のデータ範囲 | 「A1:E100」や「売上データ!A:E」のように指定します。末尾の行番号を省略して「A:E」と指定すると、将来データが増えても自動対応できます。 |
| 第2引数:クエリ | 実行したい命令文 | 「”SELECT A, B WHERE C = ‘完了’”」のように、必ず半角ダブルクォーテーション「””」で囲んで指定します。 |
| 第3引数:見出し | 見出し(ヘッダー)行の数 | 省略可能ですが、省略するとGoogleが自動推測して見出しが本文に混ざるトラブルが起きやすいため、常に「1」と明示するのが実務の鉄則です。 |
覚えておきたい主要コマンド(句)一覧
QUERY関数の第2引数で使う主な命令(句)は以下の通りです。これらをレゴブロックのように組み合わせるだけで、どんな複雑なデータ加工も自由自在に行えます。
| 句(コマンド) | 役割 | 記述例 |
|---|---|---|
| SELECT | 取得したい列を指定する(全列なら *) | SELECT A, C, D |
| WHERE | 条件を指定して行を絞り込む | WHERE B = ‘東京’ AND D >= 1000 |
| ORDER BY | 並び順を指定する(昇順 ASC / 降順 DESC) | ORDER BY D DESC |
| LIMIT | 表示する最大行数を制限する | LIMIT 10 |
| GROUP BY | 指定した列ごとにグループ化して集計する | GROUP BY B |
| LABEL | 出力される列のヘッダー名を変更する | LABEL SUM(D) ‘合計金額’ |
句の記述順序ルール
QUERY関数では、句を書く順番が厳密に決まっています。
「SELECT → WHERE → GROUP BY → ORDER BY → LIMIT → LABEL」の順序を守る必要があります。例えば、ORDER BYの後にWHEREを書くとエラーになるため注意してください。
基本ステップで学ぶQUERY関数の実践例
特定の列だけを順番を入れ替えて抽出する(SELECT)
元の表がA列からE列まであり、そのうち「A列(商品名)」と「D列(価格)」だけを取り出したい場合は、SELECT句で列記号を指定します。
=QUERY(A:E, "SELECT A, D", 1)
もし「D列を左側に、A列を右側に」と並び順を入れ替えたい場合は、指定順序を「SELECT D, A」に変えるだけで実現できます。元の表の列順序を変更する必要が一切ありません。
条件に合致する行だけを絞り込む(WHERE)
WHERE句を使うと、指定した条件に一致する行だけを抜き出せます。
=QUERY(A:E, "SELECT A, B, C WHERE C = '完了'", 1)
重要:文字列と数値の指定ルール
- 文字列を指定するとき:シングルクォーテーション「’ ‘」で囲む(例: C = ‘完了’、B = ‘東京’)
- 数値を指定するとき:クォーテーションなしでそのまま記述(例: D >= 5000)
- 空白行を除外するとき:「WHERE A IS NOT NULL」を指定する
データ範囲を「A:E」のように列全体で指定した場合、下の方にある大量の空白行まで読み込まれてしまうことがあります。
そのため、実務では「WHERE A IS NOT NULL」を条件に加えて、空白行をあらかじめ除外しておくのがベストプラクティスです。
=QUERY(A:E, "SELECT A, B, D WHERE A IS NOT NULL AND D >= 1000", 1)
データを並び替える(ORDER BY)
金額の高い順や、日付の新しい順に並び替えたい場合は、ORDER BY句を使用します。
- 昇順(小さい順・古い順):ASC(デフォルトなので省略可能)
- 降順(大きい順・新しい順):DESC
=QUERY(A:E, "SELECT A, B, D WHERE A IS NOT NULL ORDER BY D DESC", 1)
トップ5や上位ランキングを抽出する(LIMIT)
売上トップ5や、最新の投稿3件だけを表示したい場合は、末尾に「LIMIT 件数」を追加します。
=QUERY(A:E, "SELECT A, B, D WHERE A IS NOT NULL ORDER BY D DESC LIMIT 5", 1)
これだけで、「未入力行を除外」し、「金額が高い順に並び替え」、「上位5件だけを瞬時に抽出」するランキング表が完成します。
実務で必ず直面する注意点とトラブル対処法
同じ列に数値と文字列が混在しているとデータが消える
QUERY関数はGoogleの可視化APIエンジンを利用しており、「1つの列には1つのデータ型(数値なら数値、文字列なら文字列)」という原則を持っています。
もし同じ列の中に「12345」という数値と「未定」という文字列が混在している場合、データ数が多い方の型に自動判定され、少ない方のデータは空白として無視されてしまいます。
対策方法
元データ側の表示形式を統一するか、数式内で「TO_TEXT関数」や「ARRAYFORMULA」を用いて文字列型に変換してからQUERY関数に引き渡すことで解決できます。
日付を条件に指定するときは「date ‘YYYY-MM-DD’」形式で記述する
WHERE句で日付を比較したい場合、通常のセルと同じように「WHERE A >= ‘2026/09/01’」と書いても認識されずエラーになります。
QUERY関数内で日付を扱う場合は、必ず「date」というキーワードを付けて「date ‘YYYY-MM-DD’」の形式で記述します。
=QUERY(A:E, "SELECT A, B, D WHERE B >= date '2026-09-01'", 1)
セルに入力された値を使って条件を動的に切り替える方法
検索ボックス(例えばG1セル)に入力された文字を使って動的にデータを絞り込みたい場合、ダブルクォーテーションとアンパサンド「&」を使って文字列を結合します。
=QUERY(A:E, "SELECT A, B, D WHERE B = '" & G1 & "'", 1)
クォーテーションの組み立てルール
・参照するセルが文字列の場合: ‘” & セル番号 & “‘ (外側から ダブル、シングル、ダブル、アンパサンド)
・参照するセルが数値の場合: ” & セル番号 & ” (シングルクォーテーションは不要)
IMPORTRANGEや中括弧配列と組み合わせるときは「Col1, Col2」を使う
別シートのデータを取り込むIMPORTRANGE関数や、中括弧 { } で結合した配列データをQUERY関数で扱う場合、「SELECT A, B」のような列アルファベットを使うとエラー(Unable to parse query…)が発生します。
生成された仮想配列を参照する際は、列記号の代わりに「Col1, Col2, Col3…(先頭大文字、後ろ小文字)」と記述します。
=QUERY(IMPORTRANGE("スプレッドシートのURL", "シート1!A:E"), "SELECT Col1, Col2 WHERE Col3 >= 1000", 1)
実務でそのまま使えるコピペ実践レシピ
担当者別の売上合計と注文件数を一発集計する(GROUP BY)
ピボットテーブルを作成しなくても、1つの数式で担当者別の売上合計・注文件数を集計できます。
=QUERY(A:E, "SELECT B, COUNT(A), SUM(D) WHERE A IS NOT NULL GROUP BY B ORDER BY SUM(D) DESC LABEL COUNT(A) '件数', SUM(D) '売上合計'", 1)
この数式では、B列(担当者)ごとにまとめ、件数と売上合計を計算し、売上の高い順に並び替え、さらに自動生成される列見出しを「件数」「売上合計」という分かりやすい名前にリネームしています。
未完了かつ期限が近いタスクを緊急度順に抽出する
=QUERY(A:F, "SELECT A, B, C, E WHERE C != '完了' AND A IS NOT NULL ORDER BY E ASC", 1)
ステータス(C列)が「完了」以外のタスクを抽出し、期日(E列)の古い順(昇順)に並び替えることで、今すぐ対応すべきToDoリストを自動生成できます。
まとめと次のステップ
QUERY関数を使いこなせるようになると、これまで複数の関数を組み合わせたり、手動でフィルタや並び替えを行っていた作業がすべて全自動化されます。
まずは以下の基本形から試してみてください。
- 「SELECT A, B」で欲しい列だけを取り出してみる
- 「WHERE A IS NOT NULL AND 条件」で行を絞り込んでみる
- 「ORDER BY 列 DESC」で並び替えてみる
慣れてきたら、GROUP BYによる集計や、IMPORTRANGE関数との連携にも挑戦し、スプレッドシート業務の完全自動化を進めていきましょう。
