ADVERTISEMENT

【Googleスプレッドシート】データベースSQLの結果取込!QUERY関数による加工

【Googleスプレッドシート】データベースSQLの結果取込!QUERY関数による加工
🛡️ 超解決

データベースからエクスポートしたSQLの結果を、スプレッドシートに取り込んでさらに加工したいとお考えではありませんか。GoogleスプレッドシートのQUERY関数を使えば、SQLに似た記法でデータを抽出・集計でき、別シートや別ファイルのデータも簡単に参照できます。この記事では、QUERY関数の基本的な書き方から、実際のデータベース結果を取り込む際の具体的な手順までをわかりやすく解説します。

【要点】QUERY関数でデータベースのSQL結果を自在に加工する方法

  • =QUERY(データ範囲, “SELECT句 WHERE句”): スプレッドシート内のデータをSQLライクに抽出できます。SELECTで取得する列を指定し、WHEREで条件を絞り込みます。
  • IMPORTRANGEと組み合わせて別ファイルからデータ取得: 外部のスプレッドシートやCSVをQUERYで直接読み込み、結合や集計を一発で行えます。
  • GROUP BYやORDER BYで集計と並び替え: 売上データの月別集計や、特定条件の上位表示を関数内で完結できます。

ADVERTISEMENT

QUERY関数の概要とできること

QUERY関数は、Googleスプレッドシートに組み込まれたデータベースクエリーエンジンです。引数に指定した範囲のデータを、SQLのSELECT文に似た構文で加工できます。具体的には、以下のような操作が可能です。

  • 特定の列だけを取得する(SELECT)
  • 条件に合う行だけを抽出する(WHERE)
  • データを昇順・降順に並べ替える(ORDER BY)
  • 数値データをグループ化して合計や平均を計算する(GROUP BY、PIVOT)
  • 別のシートや別のファイルのデータを直接参照する(IMPORTRANGEと組み合わせ)

通常のフィルタや関数では難しい複雑な集計も、QUERY関数なら1行の数式で実現できます。データベースからエクスポートしたCSVや、スプレッドシート内の大量データを扱う際に非常に便利です。

QUERY関数の基本的な使い方の手順

基本構文を理解する

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

=QUERY(データ範囲, “クエリ文”, [見出し行数])

  • データ範囲: 加工したいセル範囲を指定します(例:A1:D100)。
  • クエリ文: ダブルクォーテーションで囲んだSQL風の文字列です。SELECT、WHERE、ORDER BYなどの句を記述します。
  • 見出し行数: 省略可能です。データ範囲の先頭何行を見出しとして扱うかを指定します。デフォルトは1です。

例えば、A1:D100のデータから、B列が”完了”の行だけを抽出する場合は次のように書きます。

=QUERY(A1:D100, “SELECT * WHERE B = ‘完了'”, 1)

注意点として、クエリ文中の文字列はシングルクォーテーションで囲みます。また、列はアルファベット(A、B、C…)ではなく、列名(見出し行の値)で指定することもできます。見出し行がある場合は、列名をそのまま使うほうが直感的です。

データベースからエクスポートしたCSVを取り込む

データベースからエクスポートしたCSVやTSVをスプレッドシートに取り込むには、まずファイルメニューから「インポート」します。インポート後、そのデータが配置されたシートに対してQUERY関数を適用します。

  1. CSVファイルをスプレッドシートにインポートする
    メニューの「ファイル」→「インポート」を選択し、アップロードまたはGoogleドライブからCSVを選びます。「新しいシートを作成」を選んで取り込むと、元のデータがそのままシートに展開されます。
  2. インポートしたデータの範囲を確認する
    取り込んだデータの最終行・最終列を確認します。例えばシート「SalesData」のA列からF列、1行目が見出し、200行目までデータがある場合、範囲は「SalesData!A1:F200」となります。
  3. QUERY関数を入力するセルを決める
    別のシートを用意し、そのA1セルにQUERY関数を入力します。例えば、「分析シート」のA1に次のように入力します。
  4. 具体的なQUERY文を記述する
    =QUERY(SalesData!A1:F200, “SELECT A, B, F WHERE C > 100 ORDER BY F DESC”, 1)
    この例では、A列・B列・F列を取得し、C列が100より大きい行だけを抽出し、F列の降順で並べ替えます。

複数シートや別ファイルのデータを結合する

QUERY関数は、他のシートや別のスプレッドシートのデータも扱えます。同じファイル内の別シートを参照する場合は、シート名!範囲という書式を使います。別ファイルの場合はIMPORTRANGE関数と組み合わせます。

  1. 同じファイル内の別シートを参照する
    =QUERY(売上!A1:G500, “SELECT A, SUM(G) GROUP BY A LABEL SUM(G) ‘合計'”, 1)
    この例は「売上」シートのA列(商品名)とG列(金額)を使い、商品別の合計金額を集計します。LABEL句で見出しを変更しています。
  2. 別のスプレッドシートのデータをIMPORTRANGEで読み込む
    =QUERY(IMPORTRANGE(“スプレッドシートID”, “シート名!範囲”), “SELECT * WHERE Col1 IS NOT NULL”)
    IMPORTRANGEで外部ファイルのデータをまず取得し、その結果をQUERYのデータ範囲として渡します。IMPORTRANGEは最初にアクセス許可が必要です。
  3. データベースの定期的な取り込みを自動化する
    スクリプトを使わずとも、IMPORTRANGEとQUERYを組み合わせれば、外部の共有スプレッドシートからデータを引き出して加工できます。更新は数時間おきに行われるため、リアルタイム性が求められない場面で有効です。

QUERY関数使用時の注意点と制限事項

クエリ文の構文エラーに注意する

QUERY関数のクエリ文はSQLと似ていますが、一部の構文が異なります。特に以下の点に注意してください。

  • 文字列はシングルクォーテーションで囲む(“完了”ではなく’完了’)
  • 日付はDATE ‘YYYY-MM-DD’の形式で指定する(例:WHERE A > DATE ‘2025-01-01’)
  • 列指定はA、B、Cのアルファベットか、見出し行の文字列を使用する
  • 数値列には引用符をつけない(WHERE C > 100 はOK)
  • スペースや特殊文字を含む列名はバッククォートで囲む(例:`売上高`)

クエリ文内でダブルクォーテーションを使うとエラーになります。文字列連結が必要な場合はシングルクォーテーション内でバックスラッシュを使うなど、注意が必要です。

大文字小文字の扱い

QUERY関数のWHERE句での比較は、デフォルトで大文字と小文字を区別しません。ただし、CONTAINSやLIKEを使う場合は区別する場合があります。正確に一致させたいときは、LOWER関数などで事前に変換するか、データの表記を統一してください。

日付と時刻の比較

日付列をWHERE句で絞り込むときは、DATE関数を使うのが確実です。例えば、2025年4月1日以降のデータを抽出するには次のようにします。

WHERE A >= DATE ‘2025-04-01’

日時(タイムスタンプ)を含む場合は、DATETIMEやTIMESTAMPの形式も使えますが、スプレッドシートの日付シリアル値との変換に注意してください。

大量データでのパフォーマンス

QUERY関数は50万行を超えるデータでは動作が重くなることがあります。その場合、データ範囲を制限するか、フィルタをかけてからQUERYに渡すと改善します。また、IMPORTRANGEで大量データを読み込むとタイムアウトエラーが発生する可能性があるため、参照範囲を最小限に絞ってください。

ADVERTISEMENT

QUERY関数とFILTER関数の比較

機能 QUERY関数 FILTER関数
複数条件の記述 SQLライクで直感的 *や+でつなぐ必要あり
並び替え ORDER BYで簡単 SORT関数と組み合わせる
集計(合計・平均) GROUP BYやPIVOTで可能 別途SUMIFなどが必要
別シート参照 直接シート名!範囲でOK 同じ範囲にしか使えない
列の選択 SELECT句で任意の列を指定 配列全体しか返せない
学習コスト SQL知識が必要 比較的低い

QUERY関数は複雑なデータ加工に向いており、FILTER関数はシンプルな絞り込みに適しています。データベースからの結果を取り込む用途では、QUERY関数のほうが柔軟性が高いと言えます。

まとめ

QUERY関数を使うことで、データベースからエクスポートしたSQLの結果をスプレッドシート内で自在に加工できるようになります。基本的なSELECT、WHERE、ORDER BYを覚えれば、売上データの集計や在庫管理など、さまざまな業務に応用できます。最初はシンプルなクエリから試し、徐々にGROUP BYやPIVOT、IMPORTRANGEとの組み合わせに挑戦してみてください。QUERY関数をマスターすれば、スプレッドシートがまるでデータベースのように扱えるようになります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。