我从 URL 文档中获取了一些文本格式的数据(例如“12:47”,表示 12 小时 47 分钟),并计算了一些参数,例如加班、短缺等。我如何才能将这些数据(超过 24 小时)相加,以便最后在单元格中以正确的格式显示最后一个数字,例如“62:51”表示 62 小时 51 分钟。
netTime="5:37"+"7:24"+"14:45"+...
我是否必须将所有数据转换为分钟(或十进制数),然后将它们相加,然后再转换回时间格式?
请注意,[h]:mm 这样的格式在这里不适用,因为这些数据(最终答案除外)都不在单元格中,而是存储在变量中。
答案1
如果您的原始数据(要添加)不超过 24 小时,则可以使用更简单的代码:
Sub TotalTime1()
Dim a As Date, b As Date, c As Date, netTime As String
a = "5:37" 'netTime="5:37"+"7:24"+"14:45"+...
b = "7:24"
c = "14:45"
netTime = WorksheetFunction.Text(a + b + c, "[hh]:mm")
MsgBox netTime
Range("A1").Value = netTime
End Sub
VBA 本身无法将超过 24 小时的时间转换为时间值,因此您应该利用 Excel 的强大功能,使用 Evaluate 方法,例如
Sub TotalTime2()
Dim a As String, b As String, c As String, netTime
a = "25:37" 'netTime="25:37"+"7:24"+"14:45"+...
b = "7:24"
c = "14:45"
netTime = Evaluate("--""" & a & """") + _
Evaluate("--""" & b & """") + _
Evaluate("--""" & c & """")
MsgBox netTime 'General format
Range("A2").Value = netTime
Range("A2").NumberFormat = "[hh]:mm"
End Sub
如果在代码中使用表示时间的常量字符串,则符号可能会短一些:
Sub TotalTime3()
Dim netTime
'netTime="25:37"+"7:24"+"14:45"+...
netTime = [--"25:37"] + [--"7:24"] + [--"14:45"]
MsgBox netTime 'General format
Range("A3").Value = netTime
Range("A3").NumberFormat = "[hh]:mm"
End Sub