無料でExcel並み!Google スプレッドシートの使い方

会員名簿から住所が長野県の人だけを抜き出した別の表を作りたい! ExcelにはないQUERY関数の使い方

条件に一致するデータを別の表に取り出す

 会員名簿などの表で条件に一致するデータを抽出するには? 多くの場合、「フィルター」を使いますよね。そして抽出結果を別表に取り出したい時は、コピー&ペーストしているでしょうか。でも何度も繰り返し操作するのは面倒です。VLOOKUP関数を使う方法もありますが、今回はスプレッドシートならではのQUERY関数を紹介します。

条件はクエリ言語で指定する

 QUERY(クエリ)関数は、指定した条件に一致するデータをまとめて抽出できる関数です。英単語の「query」は「問い合わせ」です。意味通りに、データへ問い合わせをして結果を得る働きをするわけです。

 構文は『QUERY(データ, クエリ, [見出し])』となります。[データ]は問い合わせ対象のセル範囲、[クエリ]には、問い合わせの内容を指定します。[見出し]は、問い合わせ対象のセル範囲に含まれる見出し(タイトル行)が何行目にあるかを指定します。省略した場合は、データの内容に応じて推測されます。

 簡単な例として、会員名簿の居住地が「長野県」のデータを抽出してみます。確認のためにフィルターの結果を見てみましょう。

“居住地”が「長野県」の条件でフィルターした結果

 これと同じ結果をQUERY関数で抽出してみます。引数[クエリ]は、“Google Visualization API”のクエリ言語に則り、「"」(ダブルクォーテーション)囲んで指定します。『居住地が「長野県」』の条件は「"where D = '長野県'"」となります。「D」は居住地が入力されている列番号です。

G1に「=QUERY(A:E, "where D = '長野県'")」と入力する
『居住地(D列)が「長野県」』の条件に一致するデータが表示された

 フィルターと同じ結果を抽出できました。引数[データ]に指定した「A:E」により、A列からE列までのセル範囲をQUERY関数の対象にしています。

 なお、必要な列のみに絞って表示させることも可能です。例えば、氏名、年齢のみが必要であれば、「select B, E 」を「where」の前に追記します。氏名と年齢の入力されているB列とE列を選ぶ(select)するという意味です。

「where」の前に「select B, E 」と入力する
『居住地(D列)が「長野県」』の条件に一致するデータの氏名と年齢が表示された

範囲指定も可能

 年齢の範囲を指定して抽出することも可能です。例えば『年齢が30以上50以下』のデータを抽出するには、「=QUERY(A:E, "where E >= 30 and E <= 50")」と指定します。

G1に「=QUERY(A:E, "where E >= 30 and E <= 50")」と入力する
『年齢が30以上50以下』の条件に一致するデータが抽出された

 特定の列を基準に並べ替えも可能です。上記の例で、年齢を昇順で並べ替えたい場合は「order by E asc」を末尾に追加します。降順にしたければ「order by E desc」です。

数式を「=QUERY(A:E, "where E >= 30 and E <= 50 order by E asc")」と修正する
年齢の列で昇順に並び変わった

 QUERY関数は、指定した条件に一致するデータを表示できるため、間違えて元のデータを編集してしまう心配もありません。ここで紹介した条件文以外にも、数値の合計や平均、ピボット形式での集計なども可能です。Google Chartsのページを参考に試してみてください。