スプレッドシートのQUERY関数の条件に日付を使うとき、思ったように日付が入らないときがあると思います。
=QUERY(範囲,"where 列 = 'YYYY-MM-DD'")
上記のような関数表記は誤りなため、「#VALUE!」と表示されてどうすればよいか困る方も多いでしょう。。
この記事では、日付をQUERY関数で扱う3つの方法に加えて、年・月・日での指定方法を最後に解説していきます。
①直接日付の値を指定する方法
日付を直接指定する方法は次のような表記をします。
=QUERY(範囲,"where 列 = date 'YYYY-MM-DD'")
クオーテーション(’)で囲いテキストとして扱っていることに注意してください。また、ハイフン(-)で年月日を繋いだ表記にも注意です。
直接日付の値を指定する例
実際にスプレッドシート上で、QUERY関数に「2018年1月1日」の日付でデータを探す指定をすると、次のような表記になります。
=QUERY(B9:E15,"where B = date '2018-01-01'",true)
②変数の日付を指定する方法※非推奨
より汎用的に扱うためには、日付をセル参照したいですよね。単純に下記のようにセル参照する場合には、参照するセルの書式設定を「書式なしテキスト」と設定する必要があるので注意です。
=QUERY(範囲,"where 列 = date '"& セル &"'")
変数の日付を指定する例
例えば、予め入力しておいた「2018-01-01(書式なしテキスト)」を、QUERY関数から参照してデータを表示すると次のような例になります。
=QUERY(B11:E17,"where B = date '"&C8&"'",true)
※C8のセルは「書式なしテキスト」に設定
③変数の日付を指定する方法※推奨
こちらが一番推奨される方法です。1つ前の日付を扱う方法2では、参照する日付のセルをあらかじめ「書式なしテキスト」に設定しておく必要がありました。
ここで紹介する方法では、参照する日付のセルをTEXT関数を使って、「YYYY-MM-DD」に変換してQUERY関数に渡してあげる方法です。
=QUERY(範囲,"where 列 = date '"& TEXT(セル,"YYYY-MM-DD") &"'")
※日付を参照するセルは「書式なしテキスト」の書式に設定する必要がなくなる
変数の日付を指定する例
日付が入力されているC8セルを、TEXT関数によって「2018-01-01」に変換し、QUERY関数でデータを出力した例が次になります。
=QUERY(B11:E17,"where B = date '"& TEXT(C8,"YYYY-MM-DD") &"'",true)
年・月・日だけの日付で条件を指定する
これまでは年月日がセットになった指定方法を見てきました。ここからは、年月日を独立してQUERY関数で条件指定して、該当データを出力する方法をご紹介します。
ここからの指定時には、これまでテキストとして扱っていたためにあったクオーテーション(’)が不要になる点に注意してください。
年だけの指定
年だけを条件指定する場合には、YEAR関数を使って、次のようにQUERY関数を表記します。
=QUERY(範囲,"where YEAR(列) = "& TEXT(セル,"YYYY") &"")
年だけの指定例
次の例は、日付が2018年のデータだけを表示するQUERY関数です。
=QUERY(B13:E19,"where YEAR(B) = "& TEXT(C10,"YYYY") &"",true)
月だけの指定
ほとんどYEARと同じQUERY関数の表記ですが、 MONTH()に限っては、1月を0としてカウントしている点に注意してください。そのため、MONTH()に+1をする必要があります。
=QUERY(範囲,"where MONTH(列) +1 = "& TEXT(セル,"MM") &"")
月だけの指定例
次の例は、1月のデータを指定するQUERY関数です。
=QUERY(B14:E20,"where MONTH(B) +1 = "& TEXT(C11,"MM") &"",true)
※MONTH()の中はスタートが0(例:1月→00、2月→01)だから+1にしてあげる
日だけの指定
日だけの指定は、年指定とほぼ同じようなQUERY関数の表記になります。
=QUERY(範囲,"where DAY(列) = "& TEXT(セル,"DD") &"")
日だけの指定例
次の例では、1日を指定するQUERY関数になっています。
=QUERY(B11:E17,"where DAY(B) = "& TEXT(C8,"DD") &"",true)「QUERY関数の使い方」まとめ
QUERY関数の使い方 | 使用頻度 | 使用例 | |
---|---|---|---|
オプション | Order byで昇順・降順を指定する | ★★ | QUERY("範囲" "order by 列 asc") |
オプション | group byで同じ値をグルーピングして集計する | ★★★ | QUERY(範囲,"select 列A, 集計関数(列B) group by 列A") |
オプション | pivotを使って、group byをさらにグルーピングして表示する | ★ | QUERY(範囲, "select 列A, 集計関数(列A) where group by 列A pivot 列B") |
オプション | labelを使って、出力される列のラベルを変更する | ★ | QUERY(範囲, "label 列 '名前' ") |
オプション | formatを使って、出力される値の表示形式を変更する | ★ | QUERY(範囲, "format 列 '表示形式' ") |
オプション | limitを使って、表示する行数に制限をかける | ★ | QUERY(範囲, "limit 数") |
オプション | offsetを使って表示データを上からスキップする方法 | ★ | QUERY(範囲, "offset 数") |
オプション | optionsを使う | ★ | |
演算子 | containsを使って、指定文字列を含む行を表示する | ★★ | QUERY(範囲, "where 列 contains '検索文字列' " |
演算子 | starts withを使って、行の先頭文字列に条件を指定する | ★ | QUERY(範囲, "where 列 starts with '検索文字列' " |
演算子 | ends withを使って、行の後尾文字列に条件を指定する | ★ | QUERY(範囲, "where 列 ends with '検索文字列' " |
演算子 | likeで複雑な条件を指定する | ★ | QUERY(範囲,"where 列 like '検索文字列' ") |
演算子 | ★★★ | QUERY(範囲,"WHERE 列 matches '正規表現' ") | |
テクニック | whereの条件で空白を指定・除外する | ★★ | QUERY(範囲, "where 列 is not null") |
テクニック | QUERY関数にSUM関数を使う | ★★ | SUM(QUERY(範囲, "where 条件") |
テクニック | whereの条件に日付を指定する | ★★★ | QUERY(範囲,"where 列 = date '"& TEXT(セル,"YYYY-MM-DD") &"'") |
テクニック | QUERY関数内でimportrange関数を使って、別シートを参照する | ★★★ | QUERY(importrange(シートID,参照範囲), "where 条件") |
テクニック | 複数範囲・複数シートを結合する | ★★ | QUERY({IMPORTRANGE(シートURL,シート範囲);IMPORTRANGE(シートURL,シート範囲)},"WHERE 条件") |
テクニック | whereの条件を複数指定する | ★★★ | QUERY("範囲", "where 条件A or 条件B and 条件C") |
Google検索の変遷から見えてくる「Googleがキュレーション化する日」
[/su_note]