Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

 初めて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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした