忘れてたのでメモ
Spreadsheet では 2024年1月
のような表記でも日付フォーマットの場合日にちを持っている。なので、2024-01-01 の 2024年1月
と 2024-01-31 の 2024年1月
は別物として扱われる。
例えば年始から各月末の変化をグラフにする際に年始は年始の 2024-01-01
と 各月末 2024-01-31
, 2024-02-29
, 2024-03-31
... 2024-12-31
の項目を作る必要があり都度月末を入力するのは面倒なので、年だけ入れれば各月の月末の日を自動で生成させたい。
退屈なことは関数にやらせよう。
ゴール
A | B | |
---|---|---|
1 | 年 | 2024 |
この B1
の年を使って自動的に年始 1/1 と 1月〜12月の月末日を出力させる
結論 ARRAYFORMULA と SEQUENCE と EOMONTH を利用する
年始の日付は単純に DATE を使えば良い
=DATE(B1, 1, 1)
各月の末日をリストで出力
=ARRAYFORMULA( EOMONTH( DATE(B1, SEQUENCE(12), 1), 0) )
解説
SEQUENCE(12)
で月になる 1 〜 12 の連番を取得ARRAYFORMULA
を使って各月の日付をリスト出力EOMONTH(日付, 0)
で当月末日に変換
1. SEQUENCE(12)
で月になる 1 〜 12 の連番を取得する
参考: SEQUENCE 関数 - Google ドキュメント エディタ ヘルプ
=SEQUENCE(12)
1〜12 が出力される
2. ARRAYFORMULA
を使って各月の日付をリスト出力する
SEQUENCE
を使って出力した数字を月として使えば良い
=DATE(B1, SEQUENCE(12),1) # => 2024-01-01
これだと 1/1 の日付だけになってしまう。
SEQUENCE(12)
が出力する 1〜12 全てに DATE を適応するには配列処理ができる ARRAYFORMULA
の中で使用する必要がある
=ARRAYFORMULA(DATE(B1, SEQUENCE(12), 1))
3. EOMONTH(日付, 0)
で当月末日に変換する
後は EOMONTH
関数で DATE
関数ラップして当月末に変換すれば良い
参考: EOMONTH - Google Docs Editors Help
=ARRAYFORMULA(EOMONTH(DATE(B1, SEQUENCE(12), 1), 0))
まとめ
連番を作るのに ROW
を使う方法は関数を入力するセルに合わせて変更しなければならずイケてないな〜と感じてたので、SEQUENCE
を使う方法を知れて良かったです!
おわり ₍ᐢ. ̫.ᐢ₎
[参考]