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:00で1:15:00前の時間は、13:45:00になります。
経過時間を計算する
経過時間を計算する場合、単純な引き算とHour、Minute、Second関数を使用します。
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)として計算される。
TimeValueを使って時間を取得し、足し算・引き算が可能です。Hour、MinuteSecond関数で時間を取得する。- 秒・分単位の変換には通常の値を基に計算します。