Googleスプレッドシートで Query Where に日付型を使えるようにする

Query関数で値が参照できない

複数条件でシート内から値を探せる Query 関数ですが、絶対に間違っていないであろう条件で値が空になるので調べてみたところ、以下の記事がドンピシャでした。

GoogleスプレッドシートのQuery関数で結果が空になる謎仕様と回避策

なんだこの意味不明の仕様は…

ましてや自分は日付を参照したかったので、もう少し複雑な状況でした。

要件

以下のようなとあるログデータを

項目名A項目名B項目名C項目名D項目名E項目名F
文字列文字列数値数値数値2018/12/5
文字列文字列数値数値数値2018/12/6
文字列文字列数値数値数値2018/12/7

以下のようなシートに呼び出したい、という要件です。

12/512/612/7
項目名
項目名

ログの「項目B」と日付が一致した値を参照シート側に呼び出したいのです。

参照シート側は日付の推移を見たいたいため横並びにしているので、日付の書き方が違うのがキモです。

対応

結論から言うと以下のような記述で対応しました。

=QUERY(logsheet!$A:$F,"select C where (B='"&B2&"' AND F='"& TO_TEXT(TEXT(B$1,"YYYY/MM/DD")) &"')")

キモの部分は TO_TEXT(TEXT(***)) という「頭痛が痛い」みたいなアホっぽい関数入れ子です。

参照シート側の 12/5 という日付を一旦 2018/12/05 という日付フォーマットにバラし、さらにそいつを文字列型で見ています。

これでようやくQueryで正しく値を取れました。