はじめに
ある月の月末を取得するには、閏年があるため年と月の情報が必要になります。
VBAに直接月末を取得できる関数がありませんので、既存の関数で求めてみましょう。
いくつか方法はありますが、ここでは、DateSerial関数を利用してみます。
サンプルコード
Function getMonthLastDay(myDate As Date) As Long
Dim dt As Date
dt = DateSerial(Year(myDate), Month(myDate) + 1, 0)
'Debug.Print dt
getMonthLastDay = Day(dt)
End Function
Sub testLastDay()
Debug.Print getMonthLastDay(#12/1/2024#)
End Sub
コード解説
引数に日付型の値を入れると、月末の日付(数値)を返すようにしてみます。
汎用的に使えるように Function で書いてみました。
今回の主役は、DateSerial関数です。
DateSerial(2022,11,15) とすれば、2022/11/15 を取得でるような簡単な関数ですが、
日付部分に 0 をセットすると、 1 の前という事で前月の最終日(月末)を指してくれます。
今回は引数の日付(myDate)の年と月+1をセットして、日付部分には 0 を入れています。
これで、翌月の初日の 1日前という事になり、当月の月末の日付を返してくれます。
この時点で、月末の日付が取得されていますので、 ‘Debug.Print dt のコメントアウトを外して確認してみてください。
後は Day関数を使って、日付部分を取得して値を返すだけです。
1行で書く事も可能ですが、今回は途中経過を確認するため一旦変数に入れて処理しています。
まとめ
DateSerial関数は単に日付を生成するだけでなく、セットする値で目的の日付を得る事が可能です。
色々実験してみると、いざという時に役に立つかもしれません。