VBAで翌月(次月)を取得するには

VBAで翌月を取得するには、いくつかの方法がありますが、簡単なのはDateSerial関数を利用する方法です。

DateSerial関数の詳細については「年月日の数値をDate型に変換する(DateSerial)」をご参照ください。

一般的に日付を扱う場合はDate型を使う場合と、文字列の日付をCDate関数でDate型にする場合の2通りがあるため、どちらの書き方についても後述のサンプルで記載しています。


DateSerial関数で翌月(次月)を取得する方法

DateSerial関数は年、月、日の3つの数値(数字ではなく数”値”)からDate型の値を返します。

DateSerial(2000, 12, 31)

であれば、2000/12/31 をDate型で返します。

また、日がその月の最終日を超えている場合は月に繰り越され、月が12を超えている場合は年に繰り越されます。

そのため、以下のように月と日に通常より大きな値を設定すると、

DateSerial(2000, 13, 32)

であれば、日と月が繰り越されて 2001/02/01 が返されます。

この特性を利用して、DateSerial関数で翌月を取得するには以下のような関数を用意します。

現在日付の翌月の月を取得する場合

 

現在日付の翌月の日付を取得する場合

Year関数やMonth関数の詳細については「VBAで年、月、日を取得する(Year、Month、Day)」をご参照ください。



使い方

上の2つの関数を呼び出すサンプルです。

現在が2023/5/29であれば、GetNextMonthは「6」を返し、GetNextMonthDateは「2023/06/01」を返します。


任意の日付の翌月を取得する方法

任意の日付の翌月の月を取得する場合は、上記の関数の現在日付の部分を任意の日付を受け取る引数に変更する形にすればOKです。返却値はDateSerial関数の結果にMonth関数で月の数値を返します。

 

翌月1日を取得する場合は、DateSerial関数の結果をそのまま返します。

使い方は以下のようになります。日付文字列からDate型への変換にはCDate関数を利用しています。

CDateについての詳細は「VBAの型変換関数(キャスト)」をご参照ください。

あとは先に紹介した関数と同じですが、呼び出す関数の引数にDate型の任意の日付を渡します。

実行結果:
6 ・・・ 2023/5/29の翌月の6
2023/06/01 ・・・ 2023/5/29の翌月1日の日付