初めてQUERY関数を使う方向けの内容です。1時限目は範囲の選択がテーマです。
#説例
シート1をデータベースとし、シート2を抽出用シートとします。
まず、全件を抽出してみます。シート2へ移動し、A3に次の式を入れます。
=QUERY('シート1'!A2:E16)
すると下のように全件が出てきます。1行目を空けていますが、ここには抽出条件を入れる予定です。
ただ、これだと範囲の指定がA2:E16となっていて、シート1の17行目以降にデータが追加された場合、その都度E16をE17と修正する必要があり、不便です。できれば自動的に取り込んでいきたいでしょう。
そこで、データの追加を前提とする場合、終点のE16を単にEとします。
=QUERY('シート1'!A2:E)
これにより、範囲の選択はA2からEの最終行(デフォルトは1000行)までとなり、データが追加されても自動的に範囲に取り込まれます。
しかし、実はこの方法は無駄が多いのです。すなわち、この例でいうとA17からE1000までのデータは空っぽですが、この空っぽのデータまで引っ張ってこようとしてしまうのです。
試してみると分かるのですが一瞬エラーが出たりして動作が微妙に重くなったのが分かると思います。さらに最終行が勝手に500行追加されてしまっていることも合わせて確認してください。デフォルトは1000行ですが、500行増えてしまっていると思います(ちなみに海外では「500 rows issue」などと言われ、範囲の結合のときによく出てきます)。
そこで、引っ張ってくるときに「空白は除く」という条件を付けてやるのがスマートです。すなわち、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