Googleスプレッドシートを使い始めたばかりの人が、一番に衝撃を受けるのが「QUERY関数」の存在ではないでしょうか。Excel歴15年の自分も、初めてこの関数に触れたときは「今までVLOOKUPやフィルタ機能で苦労していたのは何だったのか」と膝を打った記憶があります。膨大なデータから必要な情報だけを、まるで魔法のように一瞬で抽出できる。そんな強力なツールの使い方を、実務の視点から紐解いていきます。
初級:まず基本を押さえる
Googleスプレッドシート QUERY関数は、Google独自とも言える非常に強力な関数です。Excelにはない機能のため、最初は「数式のなかに英語が出てきて難しそう」と感じるかもしれません。しかし、基本の形さえ覚えてしまえば、これほど心強い味方は他にありません。
QUERY関数の構文と3つの引数
QUERY関数の基本形は以下の通りです。
=QUERY(データ範囲, "クエリ", [見出し])

1つ目の「データ範囲」は、抽出元となる表全体を指定します。2つ目の「クエリ」がこの関数の心臓部で、ここに「どの列を」「どのような条件で」抽出するかを記述します。3つ目の「見出し」は、範囲の何行目が見出しなのかを指定する数字です。
ポイント: クエリ部分は必ずダブルクォーテーション(” “)で囲む必要があります。これを忘れるとエラーになるため、注意が必要です。
SELECTで「どの列を取り出すか」を決める
もっとも基本的な操作は、必要な列だけをピックアップすることです。例えば、営業部の売上管理表(A列からE列)があり、その中から「担当者名(B列)」と「売上金額(E列)」だけを抽出したい場合は次のように書きます。
=QUERY(A:E, "SELECT B, E", 1)
これだけで、指定した列だけが別シートや別の場所に展開されます。筆者の経験では、システムから書き出した不要な列が多い生データを加工する際、この「SELECT」だけで表を整理する手法をよく使います。
WHEREで「条件に合う行だけ」を絞り込む
特定の条件でデータを絞り込むのが「WHERE」の役割です。例えば、「売上金額(E列)が100,000円以上のデータだけ」を取り出したいときは、以下のような数式になります。
=QUERY(A:E, "SELECT B, E WHERE E >= 100000", 1)
文字列で絞り込みたい場合は、シングルクォーテーション(’ ‘)で値を囲みます。例えば、担当者が「田中」さんのデータだけにしたいなら WHERE B = '田中' と記述します。

中級:実務で使えるレベルに
基本がわかったら、次は実務で頻出する「並べ替え」や「複数条件」の組み合わせに挑戦しましょう。
ORDER BYでデータを並べ替える
データを抽出した際、そのままでは日付や金額がバラバラなことがあります。実務では「売上の高い順」や「最新の日付順」に並んでいる必要があるでしょう。そこで使うのが「ORDER BY」です。
=QUERY(A:E, "SELECT A, B, E WHERE E >= 50000 ORDER BY E DESC", 1)
末尾の「DESC」は降順(大きい順)を意味します。昇順(小さい順)にしたい場合は「ASC」を使うか、何も書かなければ自動的に昇順になります。
複数の条件をANDとORでつなぐ
「営業1課の担当者で、かつ売上が5万円以上」といった複合的な条件も簡単です。
=QUERY(A:E, "SELECT B, E WHERE C = '営業1課' AND E >= 50000", 1)
条件を「または」にしたい場合は「OR」を使います。経理の現場では、特定の勘定科目だけを複数ピックアップして集計する際にこのOR指定を多用します。
注意点: 条件を増やすほど数式が長くなり、打ち間違いが増えます。シングルクォーテーションの閉じ忘れには特に気をつけてください。
ラベル名を変更して見栄えを整える
QUERY関数で抽出した際、見出しが元の表と同じ(または関数の計算結果)になります。これを任意の名称に変えたいときは「LABEL」を使います。
=QUERY(A:E, "SELECT B, E LABEL E '当月売上合計'", 1)
これで、E列の見出しが「当月売上合計」という表示に切り替わります。会議用の資料を自動作成する際、システム上の味気ない項目名を日本語の分かりやすい名前に変えられるので重宝します。
上級:効率化テクニック
さらに一歩進んで、集計作業をQUERY関数に任せてしまう方法を紹介します。これができるようになると、ピボットテーブルを作る手間すら省けます。
GROUP BYで項目ごとに集計する
例えば、担当者ごとの売上合計を算出したい場合、Excelならピボットテーブルを使うのが一般的です。しかしGoogleスプレッドシート QUERY関数なら、一行で完結します。
=QUERY(A:E, "SELECT B, SUM(E) GROUP BY B", 1)
この一文で、B列(担当者)ごとにE列(金額)を合計した表ができあがります。実務で見かけるのは、この集計機能を知らずに、わざわざ別表でSUMIF関数をいくつも並べているケースです。QUERY関数なら、担当者が増えても自動で集計行が追加されるため、メンテナンスの手間が格段に減ります。
日付データを扱う際の注意点
QUERY関数で初心者がもっともつまずきやすいポイントが「日付の扱い」です。WHERE句で日付を指定する場合、単に WHERE A = '2026/03/27' と書いても動作しません。
=QUERY(A:E, "SELECT WHERE A > date '2026-03-27'", 1)
このように date 'YYYY-MM-DD' という独特の形式で書く必要があります。社内研修で教えていると、ここでエラーを出して「QUERY関数は難しい」と諦めてしまう人が多いのですが、この書き方さえ覚えてしまえば、期間指定のレポート作成が非常に楽になります。
PIVOTを使ってクロス集計を行う
さらに高度な機能として「PIVOT」があります。
=QUERY(A:E, "SELECT B, SUM(E) GROUP BY B PIVOT C", 1)
例えば、行に「担当者」、列に「部署」を配置して売上合計を表示するといった、多次元的な集計が可能です。

現場で使える実例集
具体的な業務シーンを想定した活用例を見ていきましょう。
1. 在庫管理:発注が必要な商品をリストアップ
在庫管理表(A列:商品コード、B列:商品名、C列:在庫数、D列:適正在庫)から、在庫が不足しているものだけを抽出します。
=QUERY(在庫リスト!A:D, "SELECT A, B, C WHERE C < D ORDER BY C ASC", 1)
この数式を別シートに入れておけば、在庫が足りなくなった商品が自動的に「発注リスト」として表示されます。
2. 勤怠管理:特定の部署の残業時間をチェック
全社の勤怠データから「総務部」かつ「残業が20時間以上」の社員を抽出します。
=QUERY(勤怠データ!A:F, "SELECT B, F WHERE C = '総務部' AND F >= 20", 1)
3. 経費精算:月別の項目別合計表
経費一覧から、月ごとの支払金額を科目別に集計します。
=QUERY(経費データ!A:E, "SELECT C, SUM(E) GROUP BY C LABEL SUM(E) '金額合計'", 1)
C列(科目名)ごとに合計を出しつつ、ラベルを整えることでそのまま報告書に貼り付けられる形式になります。
プロのコツ
15年実務で使い込んできた中で見つけた、他ではあまり語られないTipsを紹介します。
列指定を「列番号」ではなく「列アルファベット」で固定する
QUERY関数の中で SELECT A, B のように列を指定すると、元の表で列の挿入が行われた際に、参照がズレるという弱点があります。これを防ぐために、あえて { }(波括弧)を使って範囲を配列として読み込ませるテクニックがあります。
=QUERY({A:E}, "SELECT Col2, Col5", 1)
このように Col1, Col2 という書き方に変えると、元の範囲内で列が動いても、指定した「2列目、5列目」という関係性が維持されます。大規模な共有シートで、他人が列を勝手に追加する可能性がある場合には、この書き方をしておくのが「プロの防御策」です。
混合データ型のエラーを回避する
QUERY関数の「最大の罠」は、一つの列に数値と文字列が混在している場合です。Googleスプレッドシートの仕様として、一つの列には「数値」か「文字列」どちらか多い方のデータ型が優先され、少ない方のデータ型は無視(空白として扱われる)されてしまいます。
「経理の現場では、商品コードに『1001』といった数値と『A-1002』といった文字列が混ざることがよくあり、この設定のせいで集計が漏れるトラブルを頻繁に見かけます。」
これを回避するには、元のデータ範囲を ARRAYFORMULA(TO_TEXT(A:E)) のようにして、すべて一度文字列に変換してからQUERY関数に渡すという裏技があります。
プロのTips: 大量のデータを扱う際、QUERY関数の中にさらにIMPORTRANGE関数を組み込むことで、別ファイルから必要なデータだけを絞り込んで持ってくることができます。ファイル自体が重くなるのを防ぐための、事務効率化の鉄板構成です。
また、Googleスプレッドシートの関数とExcelの機能の違いを理解することも重要です。例えば、ExcelのFILTER関数も強力ですが、QUERY関数ほどの柔軟な集計機能(SQLライクな操作)は持っていません。
Microsoft公式: FILTER関数
さらに、データの整合性を保つという点では、Power Queryの考え方も非常に参考になります。
Microsoft公式: パワー クエリのデータ型
まとめ
Googleスプレッドシート QUERY関数を使いこなすためのポイントを整理しました。
SELECTで必要な列だけを選び、WHEREで条件を絞り込むのが基本
GROUP BYを使えば、ピボットテーブルなしで項目別集計ができる
日付の指定には date 'YYYY-MM-DD' という特別な書き方が必要
* データ型が混在すると消えるデータがあるため、事前のデータ整理が重要
一度この関数の便利さを知ってしまうと、もう手作業でのコピペや複雑すぎるIF関数のネストには戻れません。最初は短い数式から始めて、少しずつ条件を増やしていきながら、自分の業務を自動化する快感を味わってみてください。
困ったときはこの記事に戻って、構文や実例を再度確認してみてください。


コメント