VBA Hour 関数:時を取得する

はじめに

Excel VBA マクロの Hour 関数から時を取得する方法を紹介します。

Hour 関数は、指定した時刻の時を返します。

1:02:03 なら 1 を返します。

Int(日時) * 24 + Hour(日時) のようにして、24 時間以上の値を取得できます。

時間から時の値を取得したいときに使用します。

年月日の値を取得するときは「Year 関数Month 関数Day 関数」を使用します。
時分秒の値を取得するときは「Hour 関数Minute 関数Second 関数」を使用します。
時間を入力や取得するには「日付を入力する」をご覧ください。
  • 目次
    • Hour 関数
    • 解説
    • 使用例

Hour 関数

Hour(時刻)
時刻から時を取得します。

引数「時刻」時刻を指定します。
戻り値の型数値型 (Integer)

解説

引数「時刻」が 1:02:03 なら 1 を返します。

引数「時刻」が日付だけなら 0 を返します。

時を 2 桁の文字列で返すなど、書式や形式を指定するには「Format 関数」を使用します。

年月日を取得するには「Year 関数Month 関数Day 関数」を使用します。

時分秒を取得するには「Hour 関数Minute 関数Second 関数」を使用します。

24 時間以上

Hour 関数から 24 時間以上の値を取得することはできません。

1 日が 24 時間なので Int(日時) * 24 + Hour(日時) のように入力して、24 時間以上の時を取得できます。

使用例

時を取得する。

Dim i As Integer
i = Hour("1:2:3")
Debug.Print(i) ' 1

i = Hour("10:20:30")
Debug.Print(i) ' 10

i = Hour("2013/1/2") ' 2013/1/2 0:00:00
Debug.Print(i) ' 0

24 時間以上

1 日を 24 時間に換算して 24 時間以上の値を取得できます。関数を作成すると便利です。

Sub 実行()
    Dim d As Date
    Dim i As Integer

    d = TimeSerial(1, 2, 3)  ' 1:02:03
    i = Int(d) * 24 + Hour(d)
    i = HourOver24(d)
    Debug.Print (i) ' 1
    
    d = TimeSerial(24, 2, 3) ' 24:02:03
    i = Int(d) * 24 + Hour(d)
    i = HourOver24(d)
    Debug.Print (i) ' 24
    
    d = TimeSerial(48, 2, 3) ' 48:02:03
    i = Int(d) * 24 + Hour(d)
    i = HourOver24(d)
    Debug.Print (i) ' 48
End Sub

' 日時から 24 時間以上の時を取得します。
Function HourOver24(ByVal dateTime As Date) As Integer

    HourOver24 = Int(dateTime) * 24 + Hour(dateTime)
    
End Function

年月日や時分秒を取得

Year 関数Month 関数Day 関数」を使用して、年月日を取得できます。

Hour 関数Minute 関数Second 関数」を使用して、時分秒を取得できます。

Dim d As Date
d = "2013/1/2 3:04:05"

Debug.Print(Year(d))   ' 2013
Debug.Print(Month(d))  ' 1
Debug.Print(Day(d))    ' 2

Debug.Print(Hour(d))   ' 3
Debug.Print(Minute(d)) ' 4
Debug.Print(Second(d)) ' 5

書式や形式を指定

Format 関数」を使用して、時の書式や形式を指定できます。

Dim d As Date
d = "2013/1/2 3:4:5"

Debug.Print(Format(d, "h"))    ' 3
Debug.Print(Format(d, "hh"))   ' 03
Debug.Print(Format(d, "h 時")) ' 3 時

Debug.Print(Format(d, "h:nn:ss")) ' 3:04:05

Format 関数」から 24 時間以上の時を取得できません。上記の方法で取得した 24 時間以上の値と結合します。

Dim d As Date
Dim i As Integer
    
d = TimeSerial(1, 2, 3) ' 1:02:03
i = Int(d) * 24 + Hour(d)
Debug.Print (i & Format(d, ":nn:ss"))               ' 1:02:03
Debug.Print (Format(i, "00") & Format(d, ":nn:ss")) ' 01:02:03

d = TimeSerial(24, 2, 3) ' 24:02:03
i = Int(d) * 24 + Hour(d)
Debug.Print (i & Format(d, ":nn:ss"))               ' 24:02:03
Debug.Print (Format(i, "00") & Format(d, ":nn:ss")) ' 24:02:03