成績管理表にデータが増えてくると、「特定の対戦相手の試合だけを見たい」「条件に合う行だけを別の場所に一覧表示したい」という場面が出てきます。こうした抽出・集計をひとつの式でこなせるのがQUERY関数です。成績管理表から特定の対戦相手の試合だけを抜き出す例で、使い方としくみを見ていきましょう。
QUERY関数とは
指定したデータ範囲に対して、SQLというデータベース検索言語に似た書き方で「どの列を」「どんな条件で」取り出すかを指定できる関数です。成績管理表では、シート全体の中からある条件に合う行だけを抜き出して別の場所に一覧表示したい場面で活躍します。
基本の書式はこうです。
=QUERY(データ範囲, "クエリ文字列", 見出し行数)
「データ範囲」は対象のセル範囲、「クエリ文字列」はSELECT(取り出す列)やWHERE(絞り込み条件)を並べた文字列、「見出し行数」は範囲の先頭に見出し行が何行あるかを数値で指定する部分です。
成績管理表での実例:特定の対戦相手の成績だけを抽出する
大阪グーニーズの「個人成績」シートには、A列に試合日、B列に対戦相手、C列に打数、D列に安打が入っているとします。
| 試合日 | 対戦相手 | 打数 | 安打 |
|---|---|---|---|
| 4/6 | ○○ファイターズ | 4 | 2 |
| 4/13 | △△ベアーズ | 3 | 1 |
| 5/11 | ○○ファイターズ | 4 | 3 |
| … | … | … | … |
この中から「○○ファイターズ戦」の試合だけを一覧表示したいとき、式はこうなります。
=QUERY(個人成績!A1:D200, "select A, B, C, D where B = '○○ファイターズ'", 1)
これで「個人成績シートのA1:D200の中から、B列が○○ファイターズの行だけを、A・B・C・Dの順で取り出す」という処理が実行され、条件に合う試合だけが自動で一覧表示されます。元データに新しい試合が追加されれば、この一覧も自動で更新されます。
一覧を表示したいシートの、空いているセル(例:別シートのA1)をクリックして選択します。QUERYの結果はこのセルを起点に自動で広がって表示されます。
見出し行を含めた範囲(例:個人成績!A1:D200)を指定します。シート名を頭につけることを忘れないようにしましょう。
“select 列, 列 where 列 = ‘条件'” の形で、取り出したい列と絞り込みたい条件をダブルクォートの中に書きます。
範囲の先頭に見出し行が1行あるなら最後の引数に「1」を指定します。確定すると条件に合う行だけがすぐに一覧表示されます。
しくみを理解する:QUERYは何をしているのか
QUERY関数は、指定したデータ範囲をひとつの小さなデータベースの表のように扱います。クエリ文字列の中の「select」で取り出す列を、「where」で絞り込む条件を指定すると、範囲内を1行ずつ確認し、条件に合う行だけを選び出して、指定した列の順番で結果を組み立てて返します。
- 列の指定は範囲内の並び順ではなく、シート上の実際の列名(A・B・C…)で行う
- 結果は起点のセルから自動で必要な行数・列数だけ広がって表示される(スピル)
- 元データが増減すると、結果も自動で再計算される
よくあるミス:抽出結果がおかしくなる原因
例えばB2:D200のようにB列から範囲を指定した場合でも、QUERYの中では引き続き「B、C、D」というシート上の実際の列名で指定します。「範囲の1列目だからA」と考えて書いてしまうと、意図した列が取り出せません。
where B = ○○ファイターズ のように、文字列の条件をシングルクォートで囲まずに書いてしまうと、○○ファイターズという文字列を列名だと誤解されてエラーになります。文字列は必ずwhere B = ‘○○ファイターズ’のようにシングルクォートで囲みましょう。
- QUERY関数は「SQL風の書き方でデータを抽出・整形する」関数
- 列の指定は範囲内の順番ではなくシート上の実際の列名で行う
- 結果は起点セルから自動で広がって表示され、元データの変化にも自動で追従する
次回予告
次回のテーマは「UNIQUE関数」です。重複したデータを取り除いてリストを作る仕組みを、シーズン出場選手一覧を自動生成する例で解説していきます。
▶︎ 次回:UNIQUE関数の使い方としくみ



コメント