在 VBA 中,如何对内存中超过 24 的小时和分钟求和(不在 Excel 范围内)

在 VBA 中,如何对内存中超过 24 的小时和分钟求和(不在 Excel 范围内)

我从 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

相关内容