VBAで自動化 VBA一覧 日付・時刻 配列・データ操作

【VBA】Hour 関数、Minute 関数、Second 関数の使い方と活用例

Excel VBA では、時刻を操作するための便利な関数として HourMinuteSecond 関数が用意されています。これらの関数を活用することで、時刻データから「時」「分」「秒」を簡単に抽出し、計算や比較が可能になります。

Hour 関数

Hour 関数は、時刻データから「時」の部分を抽出します。

【構文

Hour(time)

time: 時刻を表す値(Date 型または時刻形式の文字列)。

Minute 関数

Minute 関数は、時刻データから「分」の部分を抽出します。

【構文

Minute(time)

time: 時刻を表す値。

Second 関数

Second 関数は、時刻データから「秒」の部分を抽出します。

【構文

Second(time)

time: 時刻を表す値。

現在の時刻を分解する

現在の時刻から「時」「分」「秒」をそれぞれ抽出して表示します。

Sub ExtractCurrentTimeParts()

Dim currentTime As Date
currentTime = Time ' 現在の時刻を取得

MsgBox "現在の時刻は: " & currentTime & vbCrLf & _
"時: " & Hour(currentTime) & vbCrLf & _
"分: " & Minute(currentTime) & vbCrLf & _
"秒: " & Second(currentTime)

End Sub

結果
現在の時刻が 14:35:50 の場合、以下が表示されます。

現在の時刻は: 14:35:50
時: 14
分: 35
秒: 50

セルの時刻から時・分・秒を抽出

セル A1 に入力された時刻から「時」「分」「秒」を抽出します。

Sub ExtractTimeFromCell()

Dim timeValue As Date
timeValue = Range("A1").Value ' セル A1 の時刻を取得

MsgBox "セルの時刻は: " & timeValue & vbCrLf & _
"時: " & Hour(timeValue) & vbCrLf & _
"分: " & Minute(timeValue) & vbCrLf & _
"秒: " & Second(timeValue)

End Sub

午前・午後で処理を分岐

現在の時刻が午前か午後かで異なるメッセージを表示します。

Sub CheckAMPM()

Dim currentHour As Integer
currentHour = Hour(Time) ' 現在の「時」を取得

If currentHour < 12 Then

MsgBox "午前です。"

Else

MsgBox "午後です。"

End If

End Sub

特定の分刻みに処理を実行

現在の分が5の倍数であれば特定の処理を実行します。

Sub ExecuteEveryFiveMinutes()

Dim currentMinute As Integer
currentMinute = Minute(Time) ' 現在の「分」を取得

If currentMinute Mod 5 = 0 Then

MsgBox "現在の分 (" & currentMinute & ") は5の倍数です!"

Else

MsgBox "現在の分 (" & currentMinute & ") は5の倍数ではありません。"

End If

End Sub

時刻を加算して操作

時刻に特定の「時」「分」「秒」を加算します。

Sub AddTimeParts()

Dim baseTime As Date
Dim newTime As Date

baseTime = TimeValue("12:30:15") ' 基準時刻を設定
newTime = baseTime + TimeSerial(1, 45, 30) ' 1時間45分30秒を加算

MsgBox "元の時刻: " & baseTime & vbCrLf & "新しい時刻: " & newTime

End Sub

結果
12:30:15 に 1時間45分30秒を加算すると、14:15:45 が表示されます。

時刻の差を計算

2つの時刻の差を計算して、それを「時」「分」「秒」で表示します。

Sub CalculateTimeDifference()

Dim startTime As Date
Dim endTime As Date
Dim timeDifference As Double

startTime = TimeValue("08:15:30")
endTime = TimeValue("10:45:15")
timeDifference = endTime - startTime

MsgBox "時刻の差は: " & Int(timeDifference * 24) & " 時間 " & _
Minute(timeDifference) & " 分 " & _
Second(timeDifference) & " 秒"

End Sub

指定した範囲内でループ処理

時刻範囲(09:0018:00)の各時間ごとにメッセージを表示します。

Sub LoopThroughTimeRange()

Dim currentTime As Date
Dim endTime As Date

currentTime = TimeValue("09:00")
endTime = TimeValue("18:00")

Do While currentTime <= endTime
MsgBox "現在の時刻: " & Format(currentTime, "hh:mm:ss")
currentTime = currentTime + TimeSerial(1, 0, 0) ' 1時間を加算
Loop

End Sub

注意点とベストプラクティス

  1. 時刻の型に注意
  2. ゼロパディングに注意
    • 時刻の数値(例: 9 時間)は、フォーマットを指定しない場合、ゼロパディングされません(例: 09 ではなく 9 と表示される)。
  3. 時間操作には TimeSerial を活用
    • 時刻を加算・減算する場合は、TimeSerial 関数を併用することでコードが簡潔になります。

まとめ

Excel VBA の HourMinuteSecond 関数を使用すると、時刻を効率的に操作できます。主な活用ポイントは以下の通りです:

  1. 時刻の分解: 現在の時刻やセルの時刻を「時」「分」「秒」に分解可能。
  2. 条件付き処理: 時間範囲や特定の条件で動作を分岐。
  3. 時刻の操作: 時刻の加算・減算や差分計算も容易。

    -VBAで自動化, VBA一覧, 日付・時刻, 配列・データ操作