notebook

都内でWEB系エンジニアやってます。

Spreadsheetの特定カラムの値でグループ化して結合する

よくあるかはわからないが、タスクリストをスプレッドシートに落とし込んで日毎にまとめてフォーマットする、みたいなやつ

すぐ忘れるだろうなと思ったので残しておく

画像のようにB列の日付ごとにD列の情報をグループ化してI列に表示している

f:id:swfz:20220312030844p:plain

いきなり式だが次のようにする

=JOIN(CHAR(10),transpose(QUERY($A$2:$D,"SELECT D WHERE B=DATE '"&TEXT(G2,"YYYY-MM-DD")&"'")))

日付のユニーク

G2のセルに=unique(B2:B)と入力しB列のユニークを取るようにしている

複数行展開される

QUERY

f:id:swfz:20220312030850p:plain

画像のように対象行の日付での検索を行っている

外部のセルを参照するだけであればクエリの中でB="&G2&" のように一度クオートでクエリ式を区切って対象セルを&で挟んであげれば良い

日付で検索する場合は上記のように外部のセルを指定するだけではヒットしない

  • DATEを含める
  • TEXTでフォーマット指定
  • 年月日は-区切り'で囲む

必要がある

参考: (Gスプレッドシート)QUERY関数で日付を抽出条件に指定する - いきなり答える備忘録

TRANSPOSE

配列またはセルの範囲の行と列を入れ変える

QUERYの結果は複数行なのでそれを複数列に展開する

参考: TRANSPOSE - ドキュメント エディタ ヘルプ

JOIN

複数の値をつなげる、引数として配列を受け取れるようなのでQUERY+TRANSPOSEで複数列にまたがったデータをつなげる

今回はD列をSELECTで抽出してつなげている

区切り文字を指定できるので改行CHAR(10)を指定する

参考: (Gスプレッドシート)改行をはさんで文字列を結合する - いきなり答える備忘録

おわり

Slackのワークフローとスプレッドシートを使ってリマインダーの内容をカスタマイズしたいなと思ってやってみた

とりあえずそれっぽい内容の整形までは行えた