DateSerial、TimeSerial 関数は引数に指定した日付・時刻に対応する数値からDate型へ値を変換します。
引数に指定した値が日時として正しい範囲にない場合、超過分が加算(超過分がマイナスの場合は減算)された値が返されます。これは、ある基準日時からの相対日時を取得するのに使用できます。
DateSerial関数の使用方法
引数名 | 省略 | 説明 |
---|---|---|
Year | × | 年を表す 100 ~ 9999 の範囲の数値または数式を指定します。 |
Month | × | 月を表す 1 ~ 12 の範囲の数値または任意の数式を指定します。 数値がこの範囲からはずれた場合、超過分が加算された日付が返されます。 |
Day | × | 日を表す 1 ~ 31 の範囲の数値または任意の数式を指定します。 数値がこの範囲からはずれた場合、超過分が加算された日付が返されます。 |
DateSerial関数の使用例
年月日を指定してDate型を取得する例
Sub sample_ef037_01()
'2013/1/1
Debug.Print "日付[1]:" & DateSerial(2013, 1, 1)
'2013/1/1 から90日後
Debug.Print "日付[2]:" & DateSerial(2013, 1, 1 + 90)
'2013/1/1の一カ月前
Debug.Print "日付[3]:" & DateSerial(2013, 0, 1)
'2013/1/1の1日前 ⇒ 前月末日
Debug.Print "日付[4]:" & DateSerial(2013, 1, 0)
End Sub
ある年の月末をすべて取得する例
Sub sample_ef037_02()
Dim intYear As Integer
Dim i As Integer
'月末表示する年を設定
intYear = 2012 '閏年
For i = 1 To 12
'月末を表示
Debug.Print DateSerial(intYear, 1 + i, 0)
Next i
End Sub
TimeSerial関数の使用方法
引数名 | 省略 | 説明 |
---|---|---|
Hour | × | 時を表す 0 (12:00 AM) ~ 23 (11:00 PM) の範囲の数値または数式を指定します。 |
Minute | × | 分を表す 0 ~ 59 の範囲の数値または任意の数式を指定します。 数値がこの範囲からはずれた場合、超過分が加算された時刻が返されます。 |
Second | × | 秒を表す 0 ~ 59 の範囲の数値または任意の数式を指定します。 数値がこの範囲からはずれた場合、超過分が加算された時刻が返されます。 |
TimeSerial関数の使用例
時・分・秒をそれぞれ指定して、Date型を取得する例です。
Sub sample_ef037_03()
'0時1分23秒
Debug.Print "時刻[1]:" & TimeSerial(0, 1, 23)
'0時1分23秒の90分後
Debug.Print "時刻[3]:" & TimeSerial(0, 1 + 90, 23)
'0時1分23秒の45秒後
Debug.Print "時刻[3]:" & TimeSerial(0, 1, 23 + 45)
'0時1分23秒の5分前
'【注意】減算して0:00:00より前になると時刻が正しく算出されません。
' 間違った使用例
Debug.Print "時刻[4]-1:" & TimeSerial(0, 1 - 5, 23)
'0:00:00より前になる場合は時間に24を指定するとうまくいきます。
Debug.Print "時刻[4]-2:" & TimeSerial(24, 1 - 5, 23)
'0:00:00より前になる場合は日付情報を付加してもうまくいきます。
'最終的に日付情報が不要の場合はTimeValueで日付を削除します。
Debug.Print "時刻[4]-3:" & _
TimeValue(DateValue("1/1") + TimeSerial(0, 1 - 5, 23))
End Sub