Googleスプレッドシートの「QUERY関数」は、大量のデータから必要な情報を自由に抽出し、並び替えや絞り込みを1つの数式で完結できる非常に強力な関数です。本記事では、基本構文を理解した次のステップとして、実務で頻出する「クエリ言語(Google Visualization API Query Language)」の各種句や演算子の使い方を具体例とともにわかりやすく解説します。
QUERY関数の基本構文
QUERY関数は、データベース言語(SQL)に似たクエリ言語を用いて表データを操作します。基本となる構文は以下のとおりです。
=QUERY(データ範囲, "クエリ文字列", [見出し行数])
- データ範囲:対象とする表全体のセル範囲(例:
A1:E100) - クエリ文字列:抽出や並び替えの命令文(例:
"select A, B where C > 1000") - 見出し行数:表のヘッダー行数。通常は「1」を指定します(省略も可能)
クエリ文字列の中では、列を列記号(A、B、Cなど)で指定し、目的に応じた句を組み合わせて記述します。
SELECT句で取得する列を指定する
「SELECT句」は、元データの中からどの列を取り出すかを指定する最も基本的な命令です。
特定の列のみを取り出す
必要な列の列記号をカンマ区切りで指定します。元の表がA〜E列まであっても、A列とC列だけを抽出することが可能です。
=QUERY(A1:E50, "select A, C", 1)
すべての列を取り出す(アスタリスク)
アスタリスク(*)を使用すると、範囲内のすべての列を一度に取得できます。WHERE句などで条件抽出を行い、列はすべてそのまま表示したい場合によく使われます。
=QUERY(A1:E50, "select *", 1)
列同士の計算結果を出力する
SELECT句の中で四則演算(+、-、*、/)を行うことも可能です。例えば、B列の単価とC列の数量を掛け合わせた金額列を生成できます。
=QUERY(A1:E50, "select A, B, C, B * C", 1)
WHERE句による条件抽出と比較演算子
「WHERE句」を使用すると、指定した条件に一致する行だけを絞り込んで抽出できます。
完全一致と不一致の判定
文字列と比較する場合はシングルクォーテーション(' ')で囲みます。不一致には「!=」または「<>」を使用します。
/* A列が「東京」の行を抽出 */
=QUERY(A1:E50, "select * where A = '東京'", 1)
/* A列が「東京」以外の行を抽出 */
=QUERY(A1:E50, "select * where A != '東京'", 1)
数値の比較演算子
数値の大小比較を行う場合は、シングルクォーテーションを付けずに直接数値を指定します。
| 演算子 | 意味 | 記述例 |
|---|---|---|
= | 等しい | where C = 100 |
!= または <> | 等しくない | where C != 100 |
> | より大きい(超える) | where C > 100 |
>= | 以上 | where C >= 100 |
< | より小さい(未満) | where C < 100 |
<= | 以下 | where C <= 100 |
/* C列の売上が50000以上の行を抽出 */
=QUERY(A1:E50, "select * where C >= 50000", 1)
文字列検索演算子を活用する
文字列の一致判定には、完全一致だけでなく部分一致や前方一致などの強力な演算子が用意されています。
contains|特定の文字列を含む(部分一致)
指定した文字列がセル内に含まれている行を抽出します。大文字・小文字は区別されます。
/* B列に「株式会社」が含まれる行を抽出 */
=QUERY(A1:E50, "select * where B contains '株式会社'", 1)
starts with|前方一致(指定した文字で始まる)
セル内の文字列が指定した文字から始まっている行を抽出します。商品コードや型番の絞り込みに最適です。
/* A列の商品コードが「PROD-」で始まる行を抽出 */
=QUERY(A1:E50, "select * where A starts with 'PROD-'", 1)
ends with|後方一致(指定した文字で終わる)
セル内の文字列が指定した文字で終わっている行を抽出します。ドメイン名や拡張子の判定などに役立ちます。
/* D列のメールアドレスが「@eguchi.net」で終わる行を抽出 */
=QUERY(A1:E50, "select * where D ends with '@eguchi.net'", 1)
matches|正規表現による高度なパターン一致
正規表現(Regular Expression)に一致する行を抽出します。複数候補のいずれかに一致させたい場合などに非常に便利です。
/* A列が「東京」または「大阪」の行を正規表現で抽出 */
=QUERY(A1:E50, "select * where A matches '.*(東京|大阪).*'", 1)
空白セル・NULLの判定(is null / is not null)
セルが未入力(空白)であるか、あるいは値が入力されているかを判定する際は「is null」「is not null」を使用します。「= ''」では正しく判定できない場合があるため、必ずこの構文を用います。
is null|空白のセルを抽出する
未完了のタスクや、入力漏れのある行を確認する際に活躍します。
/* E列の完了日が空白(未入力)の行を抽出 */
=QUERY(A1:E50, "select * where E is null", 1)
is not null|空白以外のセルを抽出する
値がしっかり入力されている行だけを対象にしたい場合に使用します。空白行を結果から除外したい場合の定番記述です。
/* A列に値が存在する有効行のみを抽出 */
=QUERY(A1:E50, "select * where A is not null", 1)
複数条件の組み合わせ(AND / OR / NOT)
複数の条件を掛け合わせることで、さらに柔軟なデータ抽出が可能になります。
- AND:指定したすべての条件を満たす行
- OR:指定した条件のいずれか1つ以上を満たす行
- NOT:条件を満たさない行(否定)
/* 地域が「東京」かつ 売上が100000以上の行 */
=QUERY(A1:E50, "select * where A = '東京' and C >= 100000", 1)
/* 地域が「東京」または「神奈川」の行 */
=QUERY(A1:E50, "select * where A = '東京' or A = '神奈川'", 1)
/* 担当者名に「テスト」を含まない行 */
=QUERY(A1:E50, "select * where not B contains 'テスト'", 1)
ORDER BY句によるデータの並び替え
抽出した結果を特定の基準で並び替えるには「ORDER BY句」を使用します。
- asc:昇順(小さい順、古い日付順、あいうえお順)※省略時のデフォルト
- desc:降順(大きい順、新しい日付順)
昇順(ASC)と降順(DESC)の指定
/* 売上(C列)を大きい順(降順)に並び替え */
=QUERY(A1:E50, "select * order by C desc", 1)
/* 日付(D列)を古い順(昇順)に並び替え */
=QUERY(A1:E50, "select * order by D asc", 1)
複数列を組み合わせた並び替え
カンマで区切ることで、第1優先キー、第2優先キーと複数の列を指定できます。例えば「部署ごとに昇順で並べ、同じ部署内では売上の高い順に並べる」といった処理が簡単に行えます。
/* 部署(A列)昇順 → 売上(C列)降順 */
=QUERY(A1:E50, "select * order by A asc, C desc", 1)
LIMIT句とOFFSET句による件数制御
大量のデータから上位のみを取り出したり、先頭をスキップして抽出したりする機能です。
LIMIT句|取得件数の上限を設定
「売上トップ5」「最新の問い合わせ3件」など、指定した行数のみを切り出して表示したい場合に使用します。
/* 売上(C列)のトップ5件を抽出 */
=QUERY(A1:E50, "select * order by C desc limit 5", 1)
OFFSET句|先頭から指定行をスキップ
先頭から指定した行数を除外してデータを取得します。LIMIT句と組み合わせることで「6位〜10位のデータを表示する」といったページネーション処理が可能です。
/* 売上トップ5を除外した次の5件(6位〜10位)を抽出 */
=QUERY(A1:E50, "select * order by C desc limit 5 offset 5", 1)
実務で役立つ実践サンプル数式
実務で頻出するシナリオに合わせた複合的なQUERY関数の活用例をご紹介します。
未完了タスクを期日の早い順にトップ10件抽出
ステータス(D列)が完了以外、かつ担当者(B列)が入力されているタスクを、期日(C列)が近い順に10件表示します。
=QUERY(A1:E100, "select A, B, C, D where D != '完了' and B is not null order by C asc limit 10", 1)
特定支店の高額受注案件のみを抽出
支店名(A列)が「東京」または「横浜」で、受注金額(C列)が30万円以上の案件を抽出し、金額の高い順に並び替えます。
=QUERY(A1:E100, "select A, B, C where (A = '東京' or A = '横浜') and C >= 300000 order by C desc", 1)
まとめ
クエリ言語のポイントまとめ
- 句の記述順序は厳密に決まっています(
SELECT→WHERE→ORDER BY→LIMIT→OFFSET) - 文字列はシングルクォーテーション(
' ')で囲み、数値はそのまま記述します - 空白の判定には「
is null」「is not null」を活用します - 文字列検索では「
contains(含む)」「starts with(前方一致)」が非常に便利です
QUERY関数を使いこなせるようになると、フィルター機能や手動での並び替え作業を一切行うことなく、動的で美しい集計ダッシュボードやレポート表を自動生成できるようになります。ぜひ日々のスプレッドシート業務に取り入れてみてください。
