スプレッドシートでQuery関数を使うと指定した範囲の中から、指定した条件に合致するデータのみを抽出することができます。
Query関数の引数で指定するデータ範囲やその中のシート名、クエリは文字列で記述することもできますが、セルの値を参照することもできます。
ここではその方法について解説しています。
通常の書き方
Query関数の基本構文は以下のようになっています。
QUERY(データ, クエリ, [見出し])
基本的には見出しを省略して、データとクエリを指定します。
例えば以下のように記述します。
=query('商品マスタ(完全版)'!$A$1:$FI$10000, "select A,B,C,D")
Query関数の引数をセル参照にする方法
上記のような記述を数式で参照するためには以下のようにします。
=query(indirect(セル番号), セル番号)
ポイントはデータ範囲はindirectで指定するということです。
実例
例えば、「ダウンロード」とうファイルのD7とD8セルに、queryの第一引数のデータ範囲とクエリの条件を記述します。
これをセル参照で呼び出すと以下のようになります。
=query(indirect('ダウンロード'!$D$7), 'ダウンロード'!$D$8)
Query関数の中でセル参照すると時のポイント
Query関数の中でセル参照すると時のポイントは大きく2つあります。
シート名の「’」は不要
まず1つ目はシート名の「’」は不要ということです。
データ範囲を直接入力した場合は以下のようになります。
=query('商品マスタ(完全版)'!$A$1:$FI$10000, "select A,B,C,D")
このとき第1引数は「‘商品マスタ(完全版)’!$A$1:$FI$10000」でシート名は「‘商品マスタ(完全版)’!」となっています。
普通に考えると参照先のセルには以下のようにそのまま入力した方がいい気がします。
'商品マスタ(完全版)'!$A$1:$FI$10000
ところが、このように入力するとエラーが発生します。
シングル(あるいはダブル)クオテーションを削除すれば正常に動きます。
データ範囲は「indirect関数」で呼び出す
クエリは直接参照先のセルを指定できるのに対して、データ範囲はindirect関数を使う必要があります。
=query(indirect('ダウンロード'!$D$7), 'ダウンロード'!$D$8)
これを次のようにindirectを使わず直接記述するとエラーになります。
=query('ダウンロード'!$D$7, 'ダウンロード'!$D$8)
indirect関数とは何か?
indirect関数は、引数でセル番号を文字列で指定し、そのセルのデータを参照してくれる関数です。
INDIRECT(参照文字列, [参照形式])
第2引数でセルの参照形式を指定することができます。デフォルト値はtrueでA1形式となります。省略時はtrueです。
falseを指定すると、R1C1形式でセル参照を行います。