Excel VBA 24時間以上の時間を加算する

たまに使うことになる24時間を越える時間の計算。
勤務時間とか残業時間とか、加算するときに必要になる。

[h]:mmにすれば〜なんてセルを使う方法はネットを探せば出てくる。
TimeValueとかHourとか。これは、23:59:59以上は対応してなく工夫がいるようだ。

ターンアラウンドタイムを小さくしたいので、できるだけVBAだけで済ませたい。
VBAでセルを使わない方法は、検索しても楽には出てこない。


もしかしたらこの先も検索することがあるかもしれないので、エッセンスを記録しておく。

Option Explicit

Sub sample1()

Dim T1 As Worksheet
Dim T2 As Worksheet

Dim wkD1 As Date
Dim wkD2 As Date
Dim wkD3 As Date
Dim wkD4 As Date

Dim wk1s As String
Dim wk2s As String
Dim wk5s As String

Set T1 = Worksheets("Sheet1")
wkD1 = T1.Range("B1").Value
wkD2 = T1.Range("B2").Value
wkD3 = T1.Range("B3").Value

Set T2 = Worksheets("Sheet2")
wkD4 = T2.Range("C1").Value

wk1s = Application.WorksheetFunction.Text(T1.Range("B1").Value, "[h]:mm")
wk2s = Application.WorksheetFunction.Text(T2.Range("C1").Value, "[h]:mm")

MsgBox wk1s
MsgBox wk2s

Call sample2(wk1s, wk2s, wk5s)

MsgBox wk5s

End Sub

Public Function sample2( _
pD1 As String, _
pD2 As String, _
p5s As String)

Dim wD1h As Integer
Dim wD1m As Integer
Dim wD2h As Integer
Dim wD2m As Integer

Dim wkDh As Integer
Dim wkDm As Integer

Dim wk1 As Integer
Dim wk2 As Integer
Dim ii As Integer

If pD1 = "0:00" Then
    p5s = pD2
    Exit Function
End If

ii = InStr(pD1, ":")
wD1h = CInt(Left(pD1, (ii - 1)))
wD1m = CInt(Right(pD1, (Len(pD1) - ii)))

ii = InStr(pD2, ":")
wD2h = CInt(Left(pD2, (ii - 1)))
wD2m = CInt(Right(pD2, (Len(pD2) - ii)))

wkDm = wD1m + wD2m

wk1 = wkDm \ 60
wk2 = wkDm Mod 60

wkDh = wD1h + wD2h + wk1

p5s = wkDh & ":" & Right("0" & wk2, 2)

End Function