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

【VBA】時間の計算方法:シリアル値

Excel VBAでは、時間の足し算・引き算、時間間隔の計算、指定の時間への変換など、さまざまな時間の計算が可能です。これを活用することで、勤務時間の管理、経過時間の計算、タイムレポートの自動化などが実現できます。時間の計算方法を基本から活用方法まで解説します。

VBAにおける時間の基本

Excelで時間は「通常値」として扱われます。時間は1日=1という考え方で表のように表現します。

シリアル値日付や時刻を数値で表したもの

時間シリアル値
午前12時0.0
午前6時0.25
午後12時0.5
午後6時0.75
午後11時59分0.99999

ポイント:1時間 = 1 ÷ 24(= 0.0416667)、1分 = 1 ÷ 1440、1秒 = 1 ÷ 86400。

時間の足し算

時間を付与する場合、時間通常値として計算します。

Sub AddHours()

Dim startTime As Date
Dim resultTime As Date

startTime = TimeValue("10:00:00") ' 開始時間
resultTime = startTime + TimeValue("2:30:00") ' 2時間30分加算

MsgBox "開始時間: " & startTime & vbCrLf & "結果時間: " & resultTime

End Sub

結果

  • 開始時間が10:00:00で、2:30:00経過すると12:30:00になります。

時間の引き算

時間の引き算も同様に行います。

Sub SubtractHours()

Dim startTime As Date
Dim resultTime As Date

startTime = TimeValue("15:00:00") ' 開始時間
resultTime = startTime - TimeValue("1:15:00") ' 1時間15分減算

MsgBox "開始時間: " & startTime & vbCrLf & "結果時間: " & resultTime

End Sub

結果

  • 開始時間が15:00:001:15:00前の時間は、13:45:00になります。

経過時間を計算する

経過時間を計算する場合、単純な引き算とHourMinuteSecond関数を使用します。

Sub CalculateElapsedTime()

Dim startTime As Date
Dim endTime As Date
Dim elapsedTime As Double

startTime = TimeValue("09:15:00") ' 開始時間
endTime = TimeValue("17:30:00") ' 終了時間

' 経過時間(シリアル値)
elapsedTime = endTime - startTime

' 結果を時間・分・秒で表示
MsgBox "経過時間: " & Int(elapsedTime * 24) & " 時間 " & _
Minute(elapsedTime) & " 分 " & _
Second(elapsedTime) & " 秒"

End Sub

結果

  • 開始時間09:15:00、終了時間17:30:00の場合、経過時間は8時間15分0秒です。

特定の時間ごとの繰り返し処理

時間の間隔(例: 1時間ごと、30分ごと)を計算して、処理を繰り返す場合の例です。

Sub LoopWithTimeInterval()

Dim currentTime As Date
Dim endTime As Date

currentTime = TimeValue("08:00:00") ' 開始時間
endTime = TimeValue("12:00:00") ' 終了時間

Do While currentTime <= endTime

MsgBox "現在の時間: " & currentTime
currentTime = currentTime + TimeValue("1:00:00") ' 1時間ごとに加算

Loop

End Sub

解説

  • currentTimeに1時間ずつ加算して終了時間までループ処理を行います。

時間を数秒や分に変換する

シリアル値をに変換するには、以下の計算を使用します。

【時間をかけて変換する例】

Sub TimeToSeconds()

Dim myTime As Date
Dim totalSeconds As Long

myTime = TimeValue("02:15:30") ' 2時間15分30秒
totalSeconds = myTime * 24 * 60 * 60 ' シリアル値を秒に変換

MsgBox "合計秒数: " & totalSeconds & " 秒"

End Sub

結果

  • 2時間15分30秒を秒に変換して8130秒と表示されます

【時間をかけて変換する例2】

Sub TimeToMinutes()

Dim myTime As Date
Dim totalMinutes As Long

myTime = TimeValue("01:45:00") ' 1時間45分
totalMinutes = myTime * 24 * 60 ' シリアル値を分に変換

MsgBox "合計分数: " & totalMinutes & " 分"

End Sub

結果

  • 1時間45分は105分です。

現在の時間を基準にした処理

現在の時間を取得して、特定の条件で処理を実行することも可能です。

Sub CheckCurrentTime()

Dim currentTime As Date
currentTime = Time ' 現在の時間

If currentTime >= TimeValue("12:00:00") Then

MsgBox "午後の時間帯です。"

Else

MsgBox "午前の時間帯です。"

End If

End Sub

まとめ

Excel VBAで時間をかけて計算する方法のポイントです。

  1. 時間はシリアル値(1日=1)として計算される。
  2. TimeValueを使って時間を取得し、足し算・引き算が可能です。
  3. HourMinuteSecond関数で時間を取得する
  4. 秒・分単位の変換には通常の値を基に計算します。

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