日付や年月から月末を求める方法を解説します。
月末を求めるシート関数EOMONTH関数を用いる方法と、
DateSerial関数のDayに0を渡す方法の二つがあります。
日付から月末を求める - EOMONTH関数
日付値から月末を求めるには、ワークシート関数のEOMONTHを用いるのが簡単です。
Dim 日付 As Date 日付 = "2026/1/5" Dim 月末 As Date 月末 = WorksheetFunction.EoMonth(日付, 0) Debug.Print 月末 ' 2026/1/31
EOMONTHは第1引数に日付を受け取る関数ですので、
日付から月末を求める場合は1発で済ますことができます。
第2引数で翌月/先月などを指定でき、
- -1なら2025/12/31を取得
- 1なら2026/2/28を取得
といった取得が可能ですのでこちらも覚えておきましょう。
ちなみにEOはEnd Ofの略です。
そのまま「最後の」ですので覚えやすいですね。
年・月から月末を求める - DateSerial関数
2026年1月の月末など年月の整数値から月末を求める場合は、
DateSerial関数の第3引数(日)に0を渡すのが簡単です。
Dim 年 As Long: 年 = 2026 Dim 月 As Long: 月 = 1 Dim 月末 As Date 月末 = DateSerial(年, 月 + 1, 0) Debug.Print 月末 ' 2026/1/31
DateSerial関数の各引数には日付の規定を超えた値を渡すことができ、
月に13を渡すと翌年1月、日に100を渡して100日後を取得することもできます。
今回は第3引数(日)に「0」を渡すことによって、1日の前日、
すなわち「前月の月末」を取得することができます。
ただし取得したいのは「当月の月末」ですので、
日を0にした分、月を+1して調整しているわけですね。
DateSerial(年,月,1)をEOMONTHに渡してももちろん動きますが、
こちらの方がコードがかなり短くなりますのでこちらを覚えておきましょう。