月末の日付を取得

中級VBA

はじめに

 ある月の月末を取得するには、閏年があるため年と月の情報が必要になります。
 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関数は単に日付を生成するだけでなく、セットする値で目的の日付を得る事が可能です。
 色々実験してみると、いざという時に役に立つかもしれません。

タイトルとURLをコピーしました