たまに使うことになる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