Excel VBAで日付処理を行う際、「指定された月の最終日」を取得したい場面は多くあります。
たとえば、月末で処理を締める帳票作成や、月初から月末までの範囲指定などがその代表例です。
本記事では、DateSerial
関数を用いて「ある日付が属する月の最終日」を取得する方法を丁寧にご紹介いたします。
目次
DateSerialを使った月末日の取得方法
VBAで月の最終日を求めるには、次のような考え方をします。
「翌月1日の1日前」を求める
この考え方に基づき、DateSerial
を使えば正確な最終日が得られます。
コード例①:汎用的な月末日取得処理
Sub GetEndOfMonthDate()
Dim baseDate As Date
Dim endOfMonth As Date
baseDate = Range("D3").Value
endOfMonth = DateSerial(Year(baseDate), Month(baseDate) + 1, 0)
MsgBox "月末日は:" & endOfMonth
End Sub
ポイント:
DateSerial(年, 月 + 1, 0)
にすることで、「翌月の0日目」=「当月の末日」を自動で取得できます。Range("D3").Value
に任意の日付(例:2025/7/10など)を入力しておく必要があります。
コード例②:1日目を指定して末日を計算
MsgBox DateSerial(Year(Range("D3").Value), _
Month(Range("D3").Value) + 1, _
1) - 1
このように「翌月の1日から1日引く」方法も同様に有効です。
注意点:月+1による年跨ぎにも対応
12月のような年末でも、Month(baseDate) + 1
として問題ありません。
たとえば「2025年12月10日」の場合でも、DateSerial(2025, 13, 0)
→ 自動的に「2025年12月31日」となります。
これは DateSerial
の仕様で、月数が13以上でも適切に年を繰り上げて処理されるためです。
まとめ|月末日取得は DateSerial が最適解
Excel VBAで月の最終日を正確に取得したい場合、DateSerial
関数を使う方法が最も安全かつシンプルです。
- 翌月の0日または翌月1日から1日引くことで当月の末日を導出
- 閏年や月末が異なる月にも対応可能
DateSerial(年, 月 + 1, 0)
で年跨ぎにも自動対応
帳票処理や月単位の集計処理など、日付境界の正確な管理が必要な場面で非常に役立ちます。
ぜひ自動処理に組み込んで、業務効率化にお役立てください。