いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)QUERY関数で日付を抽出条件に指定する

 GoogleスプレッドシートのQUERY関数で、抽出条件として日付を指定する方法についてです。

  • QUERY関数で日付を抽出条件とする場合は、第2引数で「"WHERE 列= DATE '2020-12-31'"」のような形式で指定する必要があります。
  • 他のセルに記録された日付や、関数で取得した日付を条件にする場合は若干複雑です。例えばTODAY関数と組み合わせる場合は「"WHERE 列= DATE " & TEXT(TODAY(),"'YYYY-MM-DD'"」のようにします。
  • いずれも「DATE」を含めることと、年月日を「/」ではなく「-」で区切り「'」で囲むことがポイントです。

手順

 画像ではE2セルに式を入力し、B,C列に記録されたイベントのデータから「2020/12/20以降」のものを抽出しています。

f:id:accs2014:20201231003559p:plain:w700

 E2セル

=QUERY(B2:C7,"WHERE C>= DATE '2020-12-20'",1)

 日付の指定の仕方ですが、まず日付そのものの前に「DATE」と記す必要があります。
 また、日付自体も「2020/12/20」などとスラッシュで区切るのではなくハイフンで区切り、さらに「'」で囲む必要があります。
 なかなかクセが強いですが、以上のポイントを覚えておけば間違いありません。

 
 他のセルに記録された日付や、関数で取得した日付と組み合わせて条件にする場合はさらに注意が必要です。
 次の画像では、TODAY関数を使って当日以降のイベントを抽出しています(2020年12月31日に実行した様子)。

f:id:accs2014:20201231003605p:plain:w700

 E2セル

=QUERY(B2:C7,"WHERE C>= DATE " & TEXT(TODAY(),"'YYYY-MM-DD'"),1)

 ちょっと複雑な式になっています。
 TEXT関数を使ってTODAY関数の戻り値(シリアル)を文字列に変換しているところと、「YYYY-MM-DD」の前後を「'」で囲んでいるところがポイントです。これらによりに第2引数は「"WHERE C>= DATE '2020-12-31'"」と解釈され、2020/12/31以降のイベントが抽出されます。
 なお、途中を&で区切らず「"WHERE C>= DATE TEXT(TODAY()~"」というようにしてしまってもよさそうに見えますが、それだとTEXT関数やTODAY関数がただの文字とみなされてしまい、関数として機能しないためうまくいきません(「""」内では集計関数などごく限られたもの以外、ほとんどの関数は機能しません)。
 ちなみに他のセルに記録された日付を条件とする場合は「TODAY()」の部分を「A1」などの参照に置き換えればOKです。

  
 さて、次の画像ではAND条件を使って「2020/12/20から2021/1/10まで」に該当するものを抽出しています。

f:id:accs2014:20201231003609p:plain:w700

 E2セル

=QUERY(B2:C7,"WHERE C>= DATE '2020-12-20' AND C<= DATE '2021-1-10'",1)

 難しくはありませんが「BETWEEN ~ AND ~」のような表現が使えない上に「DATE」も2回記述しなければならないため、式が長くなりがちです。