DateSerial関数:年・月・日から日付データを返すExcel VBA関数|月の末日を取得
DateSerialとは、引数の年・月・日からバリアント型の日付データを返す関数です。
引数が範囲を超えた場合、自動的に繰り上がります。例えば月に13を指定した場合、年が+1されます。-32768~32767の範囲を超えた場合はエラーになります。
日付の範囲が西暦100年1月1日 ~ 西暦9999年12月31日を超えた場合にもエラーになります。
構文: DateSerial(Year , Month , Day)
Year : 年を表す整数の数値を指定
Month : 月を表す整数の数値を指定
Day : 日を表す整数の数値を指定
DateSerial関数のVBA使用例
下の年・月・日が入力されているセルの値から日付を作成し表示します。
DateSerialで日付に変換するVBAです。
Sub MyDateSerial()
Range("C6") = DateSerial(Range("C2"), Range("C3"), Range("C4"))
End Sub
実行結果です。
日付が作成されC6セルに表示されています。
DateSerial関数で月の末日を取得と繰り上がりのテスト
C2セル : Today関数を使用し、今日の日付を表示しています。
C3セル : 今日の日付から先月の末日を求めます。
C4セル : 今日の日付から今月の末日を求めます。
C5セル : 今日の日付から来月の末日を求めます。
C6セル : 年に5年、月に8ヶ月を加算し繰り上がりのテストを行います。
DateSerial関数で月の末日を求めるVBAと、繰り上がりをテストするVBAです。
・先月の末日は、今月の1日の日付からマイナス1しています。
・今月の末日は、今月の月にプラス1した来月の1日の日付から、マイナス1しています。
・来月の末日は、今月の月にプラス2した来来月の1日の日付から、マイナス1しています。
・今月の月は8月になっていますから、これに+8すると16月になってしまいます。正しく繰り上げが行われると、月は16月-12月で4月になり、年はプラス1されます。
Sub MyDateSerial()
Range("C3") = DateSerial(Year(Range("C2")), Month(Range("C2")), 1) - 1
Range("C4") = DateSerial(Year(Range("C2")), Month(Range("C2")) + 1, 1) - 1
Range("C5") = DateSerial(Year(Range("C2")), Month(Range("C2")) + 2, 1) - 1
Range("C6") = DateSerial(Year(Range("C2")) + 5, Month(Range("C2")) + 8, Day(Range("C2")))
End Sub
実行結果です。
先月・今月・来月の月の末日の日付が表示され、繰り上げも正常に行われています。