かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Google Spreadsheet ◯年の月末日のリストを自動で作りたい

忘れてたのでメモ

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) )

月末日をリスト表示

解説

  1. SEQUENCE(12) で月になる 1 〜 12 の連番を取得
  2. ARRAYFORMULA を使って各月の日付をリスト出力
  3. EOMONTH(日付, 0) で当月末日に変換

1. SEQUENCE(12) で月になる 1 〜 12 の連番を取得する

参考: SEQUENCE 関数 - Google ドキュメント エディタ ヘルプ

=SEQUENCE(12)

1〜12 が出力される SEQUENCE(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))

ARRAYFORMULA(DATE(B1, SEQUENCE(12), 1))

3. EOMONTH(日付, 0) で当月末日に変換する

後は EOMONTH 関数で DATE 関数ラップして当月末に変換すれば良い
参考: EOMONTH - Google Docs Editors Help

=ARRAYFORMULA(EOMONTH(DATE(B1, SEQUENCE(12), 1), 0))

ARRAYFORMULA(EOMONTH(DATE(B1, SEQUENCE(12), 1), 0))

まとめ

連番を作るのに ROW を使う方法は関数を入力するセルに合わせて変更しなければならずイケてないな〜と感じてたので、SEQUENCE を使う方法を知れて良かったです!

おわり ₍ᐢ. ̫.ᐢ₎


[参考]