超簡単!スプレッドシートのQUERY関数で条件を動的に変化させる方法

apple-computer-on-desk プログラミング

スプレッドシートには、SQL のようにデータを抽出するQUERY関数が用意されています。

QUERY関数を使うと条件を満たすデータを簡単に抽出することができますが、条件が多くなったりすると数式を書くのが大変です。

さらに、条件を数式に直接書いていると、条件を変えたいときに毎回書き換える必要があります。

この記事では、QUERY関数の条件を動的に変える方法について解説します。

スプレッドシートの準備

サンプルデータとして、次のようなデータを使います。

ID名前部署
1佐藤営業
2鈴木総務
3高橋人事
4田中営業
5伊藤総務
6渡辺人事
7山本営業

QUERYを使って抽出する

QUERY関数については、次の記事で解説しています。

QUERY関数を使ってデータを抽出するには、次のような数式を使います。

OR を使って複数の条件を指定することで、抽出することができます。

=QUERY(A:C, "WHERE C = '営業' OR C = '人事'")
query-dynamic-conditions-1

これで、条件を指定して抽出するとができましたが、条件が多くなったときに1つ1つ書くのは大変です。

もう少し、簡単に書ける方法について考えてみましょう。

複数の条件を動的に指定する

条件を指定するデータを準備します。

条件部署
人事
営業
開発
総務

この条件によってデータを抽出してみます。

FILTERで条件を抽出する

FILTER関数は、指定した条件に一致するデータを抽出するのに使えます。

=FILTER(範囲, 条件1, [条件2, ...])
  • 範囲:フィルタ処理をするデータを指定します。
  • 条件1:範囲の1列目に対応する TRUE または FALSE を含む列、あるいは TRUE または FLASE と評価される配列数式を指します。
  • 条件2:省略可能

たとえば、A列からC列までのデータで、部署が「営業」のデータを抽出するには、次のように使います。

=FILTER(A:C, C:C="営業")
query-dynamic-conditions-2

今回は、条件のデータを取得するのに使います。

次のような数式を使えば、E列の2行目以下の値を取得することができます。

=FILTER(E2:E, E2:E <> "")
query-dynamic-conditions-3

E列に値を追加すれば、自動でFILTER関数で表示している値も追加されます。

query-dynamic-conditions-4

ARRAYFORMULAで条件を作る

スプレッドシートには、ARRAYFORMULA関数というとても便利な関数が用意されています。

ARRAYFORMULA関数は、配列数式から返された値を複数行に表示することができます。

=ARRAYFORMULA(配列数式)
  • 配列数式:1つの範囲か1つのセル範囲または同じサイズの複数範囲を使用する数式か、1つのセルより大きい結果を返す関数を指定します。

ARRAYFORMULA関数を使って、先ほどのFILTER関数で表示している値を変更します。

次の数式で「C = “人事”」のようにします。

=ARRAYFORMULA("C = '" & FILTER(E2:E, E2:E <> "") & "'")
query-dynamic-conditions-5

JOINで条件をつなぎ合わせる

JOIN関数は、指定した区切り文字を使って値を結合することができます。

=JOIN(区切り文字, 値または配列1, [値または配列2, ...])
  • 区切り文字:結合する各値の間に配置する文字列
  • 値または配列1:区切り文字を使用して結合する値または配列
  • 値または配列2:省略可能

JOIN関数を使って、先ほど作った条件を OR でつなぎあわせます。

=JOIN(" OR ", ARRAYFORMULA("C = '" & FILTER(E2:E, E2:E <> "") & "'"))
query-dynamic-conditions-6

QUERY

最後に、この条件を使ってデータを抽出します。

QUERY関数をシンプルにするために、先ほどの数式を次のように変更します。

これでQUERY関数のクエリができました。

="WHERE " & JOIN(" OR ", ARRAYFORMULA("C = '" & FILTER(E2:E, E2:E <> "") & "'"))
query-dynamic-conditions-7

QUERY関数のクエリに先ほどのセルを参照することで、データを抽出することができます。

=QUERY(A:C, F2)
query-dynamic-conditions-8

E列の条件部署を変えるだけで、QUERY関数はそのままで抽出するデータが自動で変わります。

query-dynamic-conditions-9

まとめ

QUERY関数のクエリ部分をセル参照にすることで、柔軟にデータを抽出することができます。

FILTER関数、ARRAYFORMULA関数、JOIN関数などを利用すればクエリの条件を作ることができます。

参考

QUERY – Google ドキュメント エディタ ヘルプ

FILTER – Google ドキュメント エディタ ヘルプ

ARRAYFORMULA – Google ドキュメント エディタ ヘルプ

JOIN – Google ドキュメント エディタ ヘルプ

タイトルとURLをコピーしました