QUERY関数の使い方・読み方|抽出・集計・並べ替えを1つの数式で

執筆者:

カテゴリ:

QUERY関数の使い方・読み方のイメージ

配列・抽出

QUERY関数の使い方・読み方

Excel関数辞典

読み方:QUERY は「クエリ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

QUERYは、SQLに近い書き方で、抽出・集計・並べ替えを1つの数式で行える関数です。

使える環境Excel✕Googleスプレッドシート○

Excelには同じものがありません。FILTERで絞ってからSUMIFSなどで集計します。

このページの中身(20項目)
  1. 書式
  2. 列の指定方法
  3. 基本の使い方
  4. 日付を条件にする
  5. 見出しの扱い
  6. IMPORTRANGEと組み合わせる
  7. よくあるエラー
  8. FILTERとの使い分け
  9. 表計算の中で問い合わせ言語を使うということ
  10. 列の指定でつまずくところ
  11. 条件の書き方
  12. 集計とグループ化
  13. 「配列・抽出」の関数を全体から見る
  14. 数式を書く前の手順
  15. どの関数でも共通する確認
  16. 引き継ぐときに残すこと
  17. このサイトの収録状況
  18. よくある質問
  19. まとめ
  20. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

抽出・集計・並べ替えを1つの数式でまとめられるため、Googleスプレッドシートでは使う場面が特に多い関数です。FILTER + SORT + SUMIF + ピボットテーブルを1本にまとめたようなもので、慣れると他の関数を書く場面が減ります。

Excelにはありません。 スプレッドシート固有の関数です。

QUERY関数の使い方の記事構成図
QUERY関数の使い方:この記事で扱う内容

書式

=QUERY(データ範囲, "クエリ文", [見出し行数])
引数内容
データ範囲元の表
クエリ文"select ... where ..." を文字列で書く
見出し行数見出しが1行なら 1。必ず指定するのが安全

列の指定方法

ここが最初のつまずきどころです。

状況列の書き方
シート内の範囲を直接指定A, B, C(列名)
IMPORTRANGE や {} を経由Col1, Col2, Col3

同じ表でも、渡し方によって書き方が変わります。 Col1 と書くべきところで A と書くとエラーになります。

QUERY関数の使い方の要点図
QUERY関数の使い方

基本の使い方

ABCD
1日付支店商品売上
22026/4/3東京A1200
32026/4/8大阪A800
42026/5/2東京B1500

列を選ぶ(select)

=QUERY(A:D, "select B, D", 1)

支店と売上だけを取り出します。列の順番も自由に変えられます(select D, B)。

すべての列なら select * です。

条件で絞る(where)

=QUERY(A:D, "select * where B = '東京'", 1)

文字列はシングルクォート ' で囲みます

クエリ全体がダブルクォートなので、中はシングルです。

数値はクォート不要です。

=QUERY(A:D, "select * where D >= 1000", 1)

複数条件は and / or でつなぎます。

=QUERY(A:D, "select * where B = '東京' and D >= 1000", 1)

部分一致は like を使います。% が任意の文字列です。

=QUERY(A:D, "select * where B like '%営業%'", 1)

正規表現なら matches です。

=QUERY(A:D, "select * where B matches '東京|大阪'", 1)

並べ替える(order by)

=QUERY(A:D, "select * order by D desc", 1)

desc が降順、asc(省略可)が昇順です。

件数を絞る(limit)

=QUERY(A:D, "select * order by D desc limit 5", 1)

売上トップ5が1行で書けます。

集計する(group by)

QUERYの真価はここです。

=QUERY(A:D, "select B, sum(D) group by B", 1)

支店ごとの売上合計が一度に出ます。SUMIF を支店の数だけ並べる必要がありません。

使える集計関数:sum() avg() count() max() min()

複数をまとめて出せます。

=QUERY(A:D, "select B, sum(D), count(D), avg(D) group by B order by sum(D) desc", 1)

支店別の売上・件数・平均を、売上順で並べた集計表が1行で完成します。

クロス集計(pivot)

=QUERY(A:D, "select B, sum(D) group by B pivot C", 1)

行に支店、列に商品を置いたクロス集計表になります。ピボットテーブルを数式で作れるわけです。

日付を条件にする

QUERYで最も引っかかるのがここです。 日付は専用の書き方が要ります。

=QUERY(A:D, "select * where A >= date '2026-04-01'", 1)

date を付け、形式は yyyy-mm-dd に固定です。2026/4/1 では動きません。

セルの日付を使う場合は、文字列に変換して連結します。

=QUERY(A:D, "select * where A >= date '" & TEXT(F1, "yyyy-mm-dd") & "'", 1)

引用符の入れ子が複雑ですが、この形を覚えてしまうのが早いです。

期間で絞るなら2つ並べます。

=QUERY(A:D, "select * where A >= date '2026-04-01' and A < date '2026-05-01'", 1)

見出しの扱い

第3引数を省略すると、スプレッドシートが見出し行を推測します。推測が外れると結果がずれるので、必ず明示してください。

  • 見出しが1行 → 1
  • 見出しなし → 0

集計結果の見出しを自分で付けたいなら label を使います。

=QUERY(A:D, "select B, sum(D) group by B label B '支店', sum(D) '売上合計'", 1)

見出しを消したいなら空文字にします。

... label sum(D) ''

IMPORTRANGEと組み合わせる

別ファイルのデータを絞り込んで取り込めます。この組み合わせが実務では最も強力です。

=QUERY(IMPORTRANGE("キー", "売上!A:D"), "select Col2, sum(Col4) group by Col2", 1)

列名が Col1, Col2... になる点に注意してください。A, B では動きません。

よくあるエラー

「解析エラー」「PARSE_ERROR」

クエリ文の書き方が不正です。多い原因:

  • 文字列をシングルクォートで囲んでいない(where B = 東京)
  • 日付に date を付けていない
  • 列名の間違い(A と Col1 の取り違え)
  • group by に、select で挙げた非集計列が入っていない

select B, D group by B はエラーになります。集計していない D をグループ化に含めていないためです。select B, sum(D) group by B が正しい形です。

「値がありません」「不明な列」

Col1 と書くべきところで A と書いています。IMPORTRANGE や {} を経由したら Col 形式です。

結果が1件も返らない

  • 文字列の前後にスペースが入っている
  • 数値が文字列になっている(where D >= 1000 が効かない)
  • 日付の形式が違う

数値の列に文字列が混ざると片方が消える

QUERYは列ごとに型を推測します。数値と文字列が混在する列は、多いほうの型に揃えられ、少数派が空白になります。

これはQUERY特有の挙動で、原因が分かりにくいトラブルです。元データの型を揃えるか、select で toText() を使ってください。

FILTERとの使い分け

やりたいこと使う関数
条件で行を絞るだけFILTER
絞る+集計・グループ化QUERY
絞る+並べ替え+上位N件QUERY
条件が複雑(部分一致・正規表現)どちらでも

単純な絞り込みは FILTER のほうが読みやすいです。集計が入った瞬間にQUERYへ切り替えてください。


表計算の中で問い合わせ言語を使うということ

QUERYは、他の関数とはまったく毛色が違います。データベースへの問い合わせに使われる言語の一部を、表計算の中で書けるようにしたものです。抽出、集計、並べ替え、グループ化を一本の数式で書けるため、複数の関数を組み合わせる必要がなくなります。

この特徴は利点と欠点の両方を持ちます。利点は、複雑な処理を短く書けることです。担当者ごとに売上を集計して降順に並べ、上位十件だけを表示する、といった処理が一行で済みます。同じことを他の関数で書こうとすると、集計、重複除去、並べ替え、切り出しを組み合わせることになります。

欠点は、書き方を別に覚える必要があることです。関数の引数ではなく、文字列として書いた命令文を渡す形になります。表計算の関数の常識が通じない部分があり、最初は戸惑います。また、エラーが出たときのメッセージが分かりにくく、どこが間違っているのか特定しづらいという難点もあります。

したがって、使いどころを選ぶ関数です。日常的な抽出や集計であれば、他の関数のほうが読みやすく保守しやすくなります。QUERYが向いているのは、集計とグループ化が絡む処理、条件が複雑な抽出、そして同じ処理を何度も書き直す可能性が低い定型のレポートです。


列の指定でつまずくところ

QUERYで最初につまずくのが、列の指定方法です。列名ではなく、範囲の中での列の位置をアルファベットで指定します。

ここで重要なのは、そのアルファベットが「シートの列名」を指しているのか「範囲の中での順番」を指しているのかという点です。範囲をA列から指定していれば両者は一致しますが、C列から始まる範囲を指定した場合、範囲の一列目はCではなくAとして扱われます。ここを取り違えると、想定と違う列が返ります。

対処としては、範囲をA列から指定するか、範囲の中での位置を意識して書くかのどちらかです。後から範囲を変更する可能性があるなら、A列から指定しておくほうが混乱が少なくなります。

もうひとつ、見出し行の扱いも指定が必要です。何行目までが見出しかを引数で指定できます。指定しないと自動判定になりますが、判定が意図と違うことがあります。集計結果に見出しが混ざったり、逆に一行目のデータが見出しとして消えたりします。明示的に指定するのが確実です。

見出しを含めた場合、結果にも見出しが付いて返ります。不要な場合は、見出しの数をゼロとして指定するか、表示のラベルを空にする指定を追加します。


条件の書き方

条件は、抽出を意味する語の後ろに書きます。列の指定と比較演算子を組み合わせる形で、感覚としてはIFの条件式に近いものがあります。

文字列を比較する場合、値をシングルクォートで囲みます。数式全体がダブルクォートで囲まれているため、内側にはシングルクォートを使う、という関係になります。ここを間違えると、数式そのものが成立しません。

条件を別のセルから取ってくる場合は、文字列を連結する形になります。数式の途中で連結記号を使い、セル参照を挟み込みます。この書き方は読みにくくなりがちなので、条件が複雑になるなら、条件用の文字列を別のセルで組み立ててから参照するほうが管理しやすくなります。

日付を条件にする場合は、専用の書き方が必要です。日付を表す語の後ろに、決まった形式の文字列を置きます。セルの日付をそのまま連結しても正しく解釈されないため、書式を整える関数で変換してから渡します。ここは他の関数と比べて手間がかかる部分です。

かつで結ぶ場合とまたはで結ぶ場合の書き方もあります。括弧で優先順位を指定できるので、複雑な条件も表現できます。ただし、複雑になるほど読み手の負担が増えます。


集計とグループ化

QUERYがもっとも力を発揮するのが、グループ化を伴う集計です。指定した列の値ごとにまとめて、合計や件数や平均を出せます。

担当者ごとの売上合計、月ごとの件数、商品分類ごとの平均単価。こうした集計が一本の数式で書けます。しかも元データが増えれば結果も自動で更新されます。ピボットテーブルと似た結果を、数式として得られるのが利点です。

集計した結果を並べ替えることもできます。合計の大きい順に並べれば、そのままランキング表になります。さらに件数を絞れば、上位のみを表示できます。

注意点として、集計した列には自動的にラベルが付きます。合計を意味する語が見出しに含まれる形です。これが不要な場合は、ラベルを空にする指定を追加します。

もうひとつ、集計対象の列に文字列が混ざっていると、正しく集計されないことがあります。数値として扱われるべき列に文字列が入っていないか、事前に確認してください。


「配列・抽出」の関数を全体から見る

配列・抽出は複数の値をまとめて返す関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに9本あります。

記事
ARRAYFORMULA
ARRAY_CONSTRAIN
FILTER
FLATTEN
SEQUENCE
SORT
SORTN
TRANSPOSE
UNIQUE

このカテゴリで共通するつまずき

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

元の表を変えずに別の見え方を作れるのが利点です。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

書き始める前に決めておくことがあります。ここが曖昧なまま書くと、途中で行き詰まります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

元の表を変えずに別の見え方を作れるのが利点です。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

関数を問わず、結果がずれる原因は限られています。この5つを確認すれば、大半が解決します。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

現在、201本の記事をカテゴリ別に整理しています。関数名が分からない場合は、カテゴリから探してください。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本
条件15本
機能12本
配列・抽出10本 ←この記事
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. エラーの内容が分かりません

命令文の書き方に誤りがあります。まず条件をすべて外して単純な抽出だけにし、動作を確認してから一つずつ足していくと原因を特定できます。

Q. 列の指定が想定と違います

範囲の開始列を確認してください。範囲の中での位置で指定されるため、A列から始まっていないとずれます。

Q. 見出しが結果に混ざります

見出しの行数を明示的に指定してください。自動判定では意図と違うことがあります。

Q. 日付の条件が効きません

日付を表す専用の書き方が必要です。書式を整える関数で変換してから渡してください。

Q. 数値の列が集計されません

列に文字列が混ざっている可能性があります。列全体の型を揃えてください。

Q. Excelでも使えますか

スプレッドシート専用の関数です。Excelでは使えません。共有する相手の環境を確認してください。

Q. 他の関数で代替できますか

抽出はFILTER、集計はSUMIFS、並べ替えはSORT、重複除去はUNIQUEで代替できます。組み合わせは長くなりますが、読みやすさでは勝ります。

Q. 重くなることはありますか

対象範囲が大きいと負荷がかかります。特に他のファイルから読み込んだデータに対して使う場合は、必要な範囲に絞ってから渡してください。


まとめ

  • 書式は =QUERY(範囲, "クエリ文", 見出し行数)
  • 文字列はシングルクォート、日付は date 'yyyy-mm-dd'
  • 列名は、直接指定なら A、経由すると Col1
  • group by で集計表が1行で作れる
  • 第3引数(見出し行数)は必ず指定する
  • Excelには存在しない、スプレッドシート固有の関数

関連する関数