Google Sheets QUERY関数をマスター
Google SheetsでSQL風のデータ操作を実現します。QUERY構文を学んで、強力な関数でデータをフィルタリング、ソート、ピボット、集約できます。
QUERY関数はGoogle Sheetsで最も強力なデータ操作ツール—ですが、ほとんどのユーザーはこれを学びません。SQLに精通していれば、QUERY関数を使って、見慣れたSELECT、WHERE、GROUP BY、ORDER BY文を直接スプレッドシート関数の中に書き込めます。SQLを知らなくても、このガイドがすべて教えます。
QUERY関数により、複雑にネストされた関数、ピボットテーブル、手動フィルタリングは必要なくなります。1つのQUERY関数が従来の10以上の関数を置き換えられ、シートを高速化、シンプル化、保守しやすくします。これはビギナーのスプレッドシートユーザーと専門的なアナリストを区別するスキルです。
このガイドでは、QUERY構文を基礎から応用技法まで学びます。読み終わると、数百万行をフィルタリング、ダイナミックレポート作成、自動ダッシュボード構築ができるようになります—すべて1つの強力な関数で実現します。
必要なもの
- Google Sheetsの中級知識
- 基本的な関数とセル参照の理解
- 3列以上のデータセット(ガイド内に例があります)
ステップバイステップ
QUERY構文の基礎を理解する
QUERY関数の基本的な構造を学びます。
- 基本構文: =QUERY(data, query, [headers])
- data = クエリするレンジ(A1:D100)
- query = ダブルクォートで囲まれたSQL風クエリ("SELECT A, B WHERE C > 100")
- headers = オプション。ヘッダー行の数(通常は1)
- 列参照: 文字(A, B, C)またはCol1, Col2, Col3を使用
- 例: =QUERY(A1:D100, "SELECT A, B, C", 1)
Pro Tip
常にデータレンジにヘッダー行を含めてください。最初の行に列名があるとき、QUERYが最もよく動作します。特定の列を選択する
結果に表示する列を選択します。
- すべての列を選択: =QUERY(A1:D100, "SELECT *")
- 特定の列を選択: =QUERY(A1:D100, "SELECT A, C, D")
- 列を並べ替える: =QUERY(A1:D100, "SELECT D, A, B") は列Dを最初に表示
- Col記法を使用: =QUERY(A1:D100, "SELECT Col1, Col3, Col4")
- LABEL で列をリネーム: =QUERY(A1:D100, "SELECT A, B LABEL A 'Name', B 'Revenue'")
Pro Tip
Col記法(Col1, Col2)は、データレンジが変更される可能性がある場合、文字より優れています—自動的に適応します。WHERE句でデータをフィルタリングする
WHEREを使って、条件に基づいて行をフィルタリングします。
- 基本的なフィルター: =QUERY(A1:D100, "SELECT * WHERE B > 1000")
- テキストフィルター: =QUERY(A1:D100, "SELECT * WHERE A = 'Product A'")
- 複数の条件(AND): =QUERY(A1:D100, "SELECT * WHERE B > 1000 AND C < 5000")
- 複数の条件(OR): =QUERY(A1:D100, "SELECT * WHERE A = 'Product A' OR A = 'Product B'")
- テキストに含まれるもの: =QUERY(A1:D100, "SELECT * WHERE A CONTAINS 'Manager'")
- 日付フィルター: =QUERY(A1:D100, "SELECT * WHERE B > DATE '2024-01-01'")
Pro Tip
WHERE句のテキスト値は、ダブルクォートの内側でシングルクォートを使用する必要があります: "WHERE A = 'Text'"ORDER BYで結果をソートする
クエリ結果を昇順または降順でソートします。
- 昇順でソート: =QUERY(A1:D100, "SELECT * ORDER BY B")
- 降順でソート: =QUERY(A1:D100, "SELECT * ORDER BY B DESC")
- 複数の列でソート: =QUERY(A1:D100, "SELECT * ORDER BY A ASC, B DESC")
- WHEREとORDER BYを組み合わせる: =QUERY(A1:D100, "SELECT * WHERE C > 100 ORDER BY B DESC")
- SELECT に含まれていない列でソート: =QUERY(A1:D100, "SELECT A, B ORDER BY D DESC")
Pro Tip
句の順序は重要です: SELECT、WHERE、GROUP BY、PIVOT、ORDER BY、LIMIT。この順序に従うか、クエリは失敗します。GROUP BYでデータを集約する
ピボットテーブルのようにカテゴリでデータを要約します。
- カテゴリ別に合計: =QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A")
- カテゴリ別にカウント: =QUERY(A1:D100, "SELECT A, COUNT(B) GROUP BY A")
- カテゴリ別の平均: =QUERY(A1:D100, "SELECT A, AVG(B) GROUP BY A")
- 複数の集約: =QUERY(A1:D100, "SELECT A, SUM(B), AVG(C), COUNT(D) GROUP BY A")
- 複数の列でグループ化: =QUERY(A1:D100, "SELECT A, B, SUM(C) GROUP BY A, B")
- 明確性のためLABELを追加: =QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A LABEL SUM(B) 'Total Revenue'")
Pro Tip
GROUP BYを使う場合、SELECT内のすべての列は、GROUP BY内にあるか、集約(SUM、AVG、COUNT等)である必要があります。集計関数を使用する
データ分析用のSUM、COUNT、AVG、MIN、MAXをマスターします。
- SUM: =QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A") は数値を合計します
- COUNT: =QUERY(A1:D100, "SELECT A, COUNT(B) GROUP BY A") は空でないセルをカウントします
- AVG: =QUERY(A1:D100, "SELECT A, AVG(B) GROUP BY A") は平均を計算します
- MIN/MAX: =QUERY(A1:D100, "SELECT MIN(B), MAX(B)")
- 関数を組み合わせる: =QUERY(A1:D100, "SELECT A, SUM(B), AVG(C), COUNT(*) GROUP BY A")
Pro Tip
COUNT(*) はすべての行をカウント(空白を含む)し、COUNT(B) は列Bの空でない値だけをカウントします。結果を制限してフォーマットする
返される行数を制御してフォーマットします。
- 結果を制限: =QUERY(A1:D100, "SELECT * ORDER BY B DESC LIMIT 10") は上位10を表示
- OFFSET で行をスキップ: =QUERY(A1:D100, "SELECT * LIMIT 10 OFFSET 5") 最初の5行をスキップ
- 数値をフォーマット: =QUERY(A1:D100, "SELECT A, B FORMAT B '$#,##0.00'")
- 日付をフォーマット: =QUERY(A1:D100, "SELECT A, B FORMAT B 'yyyy-mm-dd'")
- パーセンテージをフォーマット: =QUERY(A1:D100, "SELECT A, B FORMAT B '0.00%'")
Pro Tip
LIMITは「トップ10」レポートに最適です。ORDER BY DESCと組み合わせて最高値を最初に取得します。応用技法とベストプラクティス
ダイナミックなクエリ、PIVOT、複数シートでのクエリを使用します。
- セル参照を使ったダイナミックWHERE: =QUERY(A1:D100, "SELECT * WHERE B > "&E2) はE2の値を使用
- 別のシートをクエリ: =QUERY(Sheet2!A1:D100, "SELECT * WHERE B > 1000")
- データをPIVOT: =QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A PIVOT C")
- 波括弧で複数のクエリを組み合わせ: ={QUERY(A1:D10, "SELECT *"); QUERY(A20:D30, "SELECT *")}
- エラーを処理: =IFERROR(QUERY(A1:D100, "SELECT * WHERE B > 1000"), "No results")
Pro Tip
セル参照を使ってダイナミッククエリを構築する場合、クォートに注意します。テキストが必要です: "WHERE A = '"&E2&"'"まとめ
Google Sheetsで最も強力な関数をマスターしました。シンプルなSELECT文から複雑なGROUP BY集約、ピボットテーブルまで、すべてスプレッドシート関数内でSQLプロのようにデータ操作できます。
しかし、複雑なQUERY関数を繰り返し書く場合、より賢い方法があります。ModelMonkeyはシンプルなAIプロンプトで自動的にQUERY関数を生成できます。構文を覚えてクォートエラーをデバッグする代わりに、ModelMonkeyに必要なことを伝えるだけです:
- 「製品別の総売上を最高から最低の順で表示」
- 「過去30日間の1,000ドル以上の売上をフィルタリングして営業代表別にグループ化」
- 「地域別の月間収益を表示するピボットを作成」
ModelMonkeyがQUERY関数を書き、構文を説明し、最適化を提案します。試行錯誤の時間を一瞬で機能する関数に変えます。
QUERY構文との戦いをやめる準備はできていますか? 無料14日間トライアルをスタート し、AIに関数を書かせましょう。
よくある質問
Google Sheets QUERY関数とは何ですか?
QUERYは、SQL風の構文を使ってGoogle Sheetsのデータをフィルタリング、ソート、集約する強力な関数です。構文: =QUERY(data, query, headers)。SELECT、WHERE、GROUP BY、ORDER BY、PIVOT、LIMITの句をサポートし、複雑なデータ操作ではピボットテーブルや従来の関数より柔軟です。
Google Sheets QUERYでWHEREを使う方法は?
WHEREは条件に基づいて行をフィルタリングします。構文: =QUERY(A1:D100, "SELECT * WHERE B > 1000")。テキストはシングルクォートを使用: "WHERE A = 'Product'"。AND/ORで条件を組み合わせ: "WHERE B > 1000 AND C < 5000"。部分一致にはCONTAINSを使用: "WHERE A CONTAINS 'Manager'"。
QUERYでピボットテーブルのようにデータをグループ化する方法は?
集計関数でGROUP BYを使用します。構文: =QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A")。これは列Aの各一意の値に対して列Bを合計します。SELECT内のすべての列は、GROUP BY内にあるか、集約(SUM、AVG、COUNT、MIN、MAX)である必要があります。LABELを追加して結果列をリネームします。
Google SheetsのQUERYとFILTERの違いは?
FILTERは条件に合致する行を返しますが、集約、式内でのソート、特定の列の選択はできません。QUERYはSQL構文ですべてこれを行えます。シンプルな行フィルタリングはFILTER、WHERE、GROUP BY、ORDER BY、集約を含む複雑な分析はQUERYを使用します。QUERYはより強力ですが、学習曲線が急です。
セル参照を使ってQUERY関数をダイナミックにする方法は?
連結を使ってセル値をクエリ文字列に挿入します: =QUERY(A1:D100, "SELECT * WHERE B > "&E2)。テキスト値の場合、クォートを追加: =QUERY(A1:D100, "SELECT * WHERE A = '"&E2&"'")。日付の場合: "WHERE B > DATE '"&TEXT(E2, "yyyy-mm-dd")&"'". ダイナミッククエリはセル参照が変更されたときに自動的に更新されます。