前回はExcel VBAで今日の日付を取得する方法を紹介しました。今回はその続きとして、”来月”とか、”今月の最終日”など、日付の計算を実行する方法を紹介します。前回の記事は以下から参照ください。
DateSerial関数
日付の計算を実行したい場合は、DateSerial関数を使用します。使い方は以下の通りで、それぞれyear, month, dayには日付データではなくて整数のデータ(Integer型)を設定します。
DateSerial(year, month, day)
例えば以下のようにコードを記述することで、B2セルに”2021/4/9″と入力することができます。
Cells(2, 2) = DateSerial(2021, 4, 9)
前回の記事で紹介した通り、Year関数、Month関数、Day関数は、それぞれ()内の引数に応じて、結果を整数で返します。それを利用して、以下ではB3セルに”今日の日付”を入力させます。
Cells(3, 2) = DateSerial(Year(Date), Month(Date), Day(Date))
このコード自体は Cells(3,2) = Date と同じことをしているだけですので使う場面がありませんが、以下で説明するように、これを使うことで日付の計算を実行できます。
DateSerial関数の使い方
それでは、DateSerial関数を使って実際にさまざまな日付の計算を実行してみます。
年だけ、月だけ、日だけの操作
来年の今日
月日は同じで、年だけ+1したい時は、以下のようにYear(Date)に値を加えます。
Cells(4, 2) = DateSerial(Year(Date) + 1, Month(Date), Day(Date))
もちろん引き算の場合にはマイナスします。
来月の今日
年と日は同じで、月だけ+1したい時は、以下のようにMonth(Date)に値を加えます。
Cells(5, 2) = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
もちろん引き算の場合にはマイナスします。
明日
年月は同じで、日だけ+1したい時は、以下のようにDay(Date)に値を加えます。
Cells(6, 2) = DateSerial(Year(Date), Month(Date), Day(Date) + 1)
もちろん引き算の場合にはマイナスします。
月の最終日
少し特殊な使い方として、”月の最終日”の取得方法を紹介します。最終日は月によって異なる為、数値で指定ができません。2月であれば”28″または”29″、3月であれば”31″、4月であれば”30″です。そういった場合、DateSerial関数の引数Dayに0を入力することで”前月の最終日”を指定できます。具体的な使い方を紹介します。
前月の最終日
以下のように、Dayを0とし、他は今日の日付を参照することで、前月の最終日を取得できます。
Cells(7, 2) = DateSerial(Year(Date), Month(Date), 0)
来月の最終日
前月の最終日の取得方法を応用して、来月の最終日は以下のように取得できます。Monthは+1ではなく+2になることに注意してください。
Cells(8, 2) = DateSerial(Year(Date), Month(Date) + 2, 0)
コメント