LoginSignup
7
10

More than 5 years have passed since last update.

【GAS】QUERY関数(1時限目)

Last updated at Posted at 2016-12-18

 初めてQUERY関数を使う方向けの内容です。1時限目は範囲の選択がテーマです。

説例

シート1をデータベースとし、シート2を抽出用シートとします。

スクリーンショット 2016-12-18 10.22.39.png

 まず、全件を抽出してみます。シート2へ移動し、A3に次の式を入れます。

=QUERY('シート1'!A2:E16)

すると下のように全件が出てきます。1行目を空けていますが、ここには抽出条件を入れる予定です。

スクリーンショット 2016-12-18 10.34.58.png

 ただ、これだと範囲の指定がA2:E16となっていて、シート1の17行目以降にデータが追加された場合、その都度E16をE17と修正する必要があり、不便です。できれば自動的に取り込んでいきたいでしょう。

 そこで、データの追加を前提とする場合、終点のE16を単にEとします。

=QUERY('シート1'!A2:E)

 これにより、範囲の選択はA2からEの最終行(デフォルトは1000行)までとなり、データが追加されても自動的に範囲に取り込まれます。

 しかし、実はこの方法は無駄が多いのです。すなわち、この例でいうとA17からE1000までのデータは空っぽですが、この空っぽのデータまで引っ張ってこようとしてしまうのです。

 試してみると分かるのですが一瞬エラーが出たりして動作が微妙に重くなったのが分かると思います。さらに最終行が勝手に500行追加されてしまっていることも合わせて確認してください。デフォルトは1000行ですが、500行増えてしまっていると思います(ちなみに海外では「500 rows issue」などと言われ、範囲の結合のときによく出てきます)。

スクリーンショット 2016-12-18 10.41.38.png

 そこで、引っ張ってくるときに「空白は除く」という条件を付けてやるのがスマートです。すなわち、A列が空白ならば・・・とか、B列が空白ならば・・・といった条件を付けるわけですが、列の値が数値か文字列かで文法が変わってきます。

 A列のように数値の場合は

=QUERY('シート1'!A2:E,"where A is not null")

 B列のように文字列の場合は

=QUERY('シート1'!A2:E,"where B !=''")

 です。どちらでも結果は同じです。これにより、データが増えてもスムーズにその全件を抽出できるようになったと思います。

 ここから性別が男の場合を抽出してみたいと思いますが、続きは次回にしたいと思います。

 次回(マークダウンいまいち目立たないので直書きしときます)
 http://qiita.com/ShishidoToru/items/e89fecd16c3d4e080925#_reference-b970bc5056dc8185e8d2

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10