DateSerial、TimeSerial関数

DateSerial、TimeSerial 関数は引数に指定した日付・時刻に対応する数値からDate型へ値を変換します。
引数に指定した値が日時として正しい範囲にない場合、超過分が加算(超過分がマイナスの場合は減算)された値が返されます。これは、ある基準日時からの相対日時を取得するのに使用できます。

スポンサーリンク

DateSerial関数の使用方法

構文
DateSerial(Year , Month , Day)

【戻り値】 バリアント型 (内部処理形式 Date の Variant)
引数名 省略 説明
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
  • マクロ実行結果(イミディエイトウィンドウ
    2012/01/31 
    2012/02/29 
    2012/03/31 
    2012/04/30 
    2012/05/31 
    2012/06/30 
    2012/07/31 
    2012/08/31 
    2012/09/30 
    2012/10/31 
    2012/11/30 
    2012/12/31 

TimeSerial関数の使用方法

構文
TimeSerial (Hour , Minute , Second)

【戻り値】 バリアント型 (内部処理形式 Date の Variant)
引数名 省略 説明
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

 DateValue、TimeValue関数

  • マクロ実行結果(イミディエイトウィンドウ
    時刻[1]:0:01:23
    時刻[3]:1:31:23
    時刻[3]:0:02:08
    時刻[4]-1:0:03:37
    時刻[4]-2:23:56:23
    時刻[4]-3:23:56:23
タイトルとURLをコピーしました