【VBA入門】月の最終日を取得する方法|DateSerial関数を使った日付処理

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) で年跨ぎにも自動対応

帳票処理や月単位の集計処理など、日付境界の正確な管理が必要な場面で非常に役立ちます。
ぜひ自動処理に組み込んで、業務効率化にお役立てください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次