
GoogleスプレッドシートのQUERY関数を使うと、大量のデータから必要な情報だけを抽出したり、並べ替えたり、集計したりと、さまざまなデータ操作を行うことができます。この記事ではQUERY関数で最も基本となる、「SELECT句」について解説しているので、ぜひ参考にしてみてください。
QUERY関数とは?SELECT句の基本と使い方

QUERY関数は、特定の「データ範囲」に対し、指定した「クエリ」を実行します。
クエリとは、「処理・命令」のことで、データの抽出、並べ替え、集計といった、それぞれ異なる機能を持つ10種類の「句」(例: SELECT、WHERE、GROUP BYなど)が用意されています。
この記事では、QUERY関数を使う上で最も基本となる、「どの列を抽出するか」を指示するSELECT句について解説していきます。
QUERY関数の構成要素:(データ, クエリ, [見出し])
見出し(ヘッダー行)の指定方法

第3引数である[見出し]には、データ範囲の何行目までが見出しとして扱われるかを指定します。
たとえば、見出しが2行あるデータの場合、数式は次のようになります。
=QUERY(A1:B6,"SELECT *",2)
このように、[見出し]に「2」を指定すると、QUERY関数はデータ範囲の1行目と2行目を見出しとして認識し、3行目からデータの処理を行います。
ただし、[見出し]は省略するか、「-1」を指定すると、QUERY関数が自動的に見出し行を推測してくれるため、基本的には省略で問題ありません。
SELECT句で列を抽出する
特定の列を抽出する(単一・複数)
単一

SELECT句は、データ範囲から指定した列を抽出します。
たとえば、A列とB列の範囲からA列だけを抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT A")
複数

SELECT句で複数の列を抽出したい場合、カンマ (,) で区切りながら列を記述していきます。
たとえば、A列とB列の範囲から、A列とB列を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT A,B")
全ての列を抽出する(アスタリスク *)

SELECT句でデータ範囲のすべての列を抽出したい場合、アスタリスク (*)を指定します。
たとえば、A列とB列の範囲から、すべての列を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT *")
【重要ポイント】このようにデータ範囲の全ての列を抽出する場合、SELECT句はしばしば省略されます。
抽出する列の順序を指定する

SELECT句では、抽出したい列を記述した順番が、そのまま結果として表示される列の順序になります。
たとえば、A列とB列の範囲から、結果をB列、A列の順番で表示したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT B,A")
SELECT句の応用
SELECT句と算術演算子を組み合わせる

SELECT句では、列の抽出だけでなく、数値データに対して四則演算(足し算、引き算、掛け算、割り算など)を直接行うこともできます。
たとえば、データ範囲から「A列」と、「B列に2を掛けた値」を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT A,B*2")
複数の演算子を組み合わせる

複数の算術演算子を使う場合、カンマ(,)で区切りながら、「列と算術演算子」をセットで記述していきます。
たとえば、データ範囲から「A列」と、「B列に2を掛けた値」、「B列に3を掛けた値」を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT A,B*2,B*3")
SELECT句と集計関数を組み合わせる

SELECT句では、数値データに対して、SUM(合計)といった集計関数を直接使うこともできます。
たとえば、データ範囲から「B列の合計」を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT sum(B)")
その他の集計関数
AVG():平均値を返します。COUNT():要素数(データの個数)を返します。MAX():最大値を返します。MIN():最小値を返します。SUM():値の合計を返します。
複数の集計関数を組み合わせる

複数の集計関数を使う場合、カンマ(,)で区切りながら、「集計関数と列」をセットで記述していきます。
たとえば、データ範囲から、「B列の合計」と「B列の最大値」を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT sum(B),max(B)")
SELECT句とスカラー関数を組み合わせる
SELECT句では、スカラー関数を組み合わせることで、特定のデータを基にした別の値を生成できます。スカラー関数は、文字列の変換、日付の抽出など、多様なデータ加工に役立ちます。
日時を操作する

たとえば、データ範囲からA列の日付の「年」のみを抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT year(A)")
その他の日時に関するスカラー関数
YEAR():日付から、年の値を返します。MONTH():日付から、ゼロから始まる月の値を返します。(例:1月なら0、12月なら11)DAY():日付から、日の値を返します。HOUR():時刻を含む日時から、時間の値を返します。MINUTE():時刻を含む日時から、分の値を返します。SECOND():時刻を含む日時から、秒の値を返します。MILLISECOND():時刻を含む日時から、ミリ秒部分を返します。QUARTER():日付から、四半期を1から4の数字で返します。DAYOFWEEK():日付から、曜日を1(日曜日)から7(土曜日)の数字で返します。NOW():GMTタイムゾーン(日本はGMT+9)で、現在の日時を表す日時値を返します。DATEDIFF():2つの日付値または日時値の差を、日数で返します。TODATE():指定された値を日付値に変換します。
日時操作に関する複数のスカラー関数を組み合わせる

複数のスカラー関数を使う場合、カンマ (,) で区切りながら、「関数と列」をセットで記述していきます。
たとえば、データ範囲からA列の日付の「年と月」を抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT year(A),month(A)+1")
ポイント: MONTH関数は1月を0として数えるため、1を加算しています。
文字列を操作する

たとえば、データ範囲からA列を「大文字」にして抽出したい場合、数式は次のようになります。
=QUERY(A1:B5,"SELECT upper(A)")
その他の文字列に関するスカラー関数
LOWER():文字列をすべて小文字に変換して返します。UPPER():文字列をすべて大文字に変換して返します。
QUERY関数のその他のクエリ
今回はWHERE句を中心に解説しましたが、QUERY関数で使えるクエリには、他にも以下のようなものがあります。
SELECT句: 特定の列を指定した順序で抽出します。(この記事で解説)WHERE句: 指定した条件を満たすデータのみを抽出します。(詳細記事はこちら)GROUP BY句: 指定した列の同じ要素ごとにデータを集計します。(詳細記事はこちら)PIVOT句: GROUP BYで集計したデータに分類要素を追加し、表の形式を変換します。(詳細記事はこちら)ORDER BY句: データを特定の列の値で並べ替えます。(詳細記事はこちら)LIMIT句: 抽出する行数を指定した数に制限します。(詳細記事はこちら)OFFSET句: 指定した数の最初の行をスキップします。(詳細記事はこちら)LABEL句: 抽出した列のヘッダー名を任意の名前に変更します。(詳細記事はこちら)FORMAT句: 特定の列の日付や数値などの表示形式を設定します。(詳細記事はこちら)OPTIONS句: ヘッダーの行数や特定の書式設定を適用しないなどの追加オプションを設定します。