【スプレッドシート】Query関数でシート名や条件(クエリ)をセル参照の数式で指定する方法
スプレッドシートでQuery関数を使うと指定した範囲の中から、指定した条件に合致するデータのみを抽出することができます。
Query関数の引数で指定するデータ範囲やその中のシート名、クエリは文字列で記述することもできますが、セルの値を参照することもできます。
ここではその方法について解説しています。
目次- 通常の書き方
- Query関数の引数をセル参照にする方法
- Query関数の中でセル参照すると時のポイント
- シート名の「’」は不要
- データ範囲は「indirect関数」で呼び出す
- indirect関数とは何か?
通常の書き方
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つあります。
Query関数の中でセル参照すると時のポイント- シート名の「’」は不要。
- データ範囲は「indirect関数」で呼び出す
まず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形式でセル参照を行います。
ご参考【スプレッドシート】RCとは何か?RとCの後ろの数値やカッコとマイナスになった場合の意味|R2C5やR[-2]C[3],RC[-1],R[3]C,C2:C2, R3:R10などR1C1参照形式をわかりやすく解説