添加两个时间值会弹出所需的持续时间

时间:2012-12-27 07:13:14

标签: excel-vba vbscript vba excel

我刚刚写了一段代码,看到添加了两个hh:mm:ss格式的持续时间;但没有得到我正在寻找的那个。

CODE

Option Explicit

Dim v1 : v1 = #20:20:10#
Dim v2 : v2 = #20:20:10#

MsgBox (v1 + v2)

输出来自12/31/1899 4:40:20 PM

你能指导我吗?

更新

代码

Option Explicit

Dim V1 : v1 = #20:20:10#
Dim V2 : v2 = #20:42:10#

MsgBox (Hour(V1) + Hour(V2)) & ":" & Minute(V1) + Minute(V2) & ":" & Second(V1) + Second(V2)

输出来自40:62:20

Undesired

更新代码

SumDate = "00:00:00" 

For IndexSearch = 0 To ArrayListTaskDetails.Count - 1 Step 4

dt1 = ArrayListTaskDetails(IndexSearch + 3)         
SumDate = TimeAdd(dt1,SumDate)

Loop

Function TimeAdd(dt1,dt2)

If (IsDate(dt1) And IsDate(dt2)) = False Then
TimeAdd = "00:00:00"
Exit Function
End If

TimeAdd = Hour(dt1)+Hour(dt2) & ":" & Minute(dt1)+Minute(dt2) & ":" & Second(dt1)+Second(dt2)
End Function

3 个答案:

答案 0 :(得分:2)

您可以使用TimeValue函数返回包含时间的子类型Date的变体。

 Option Explicit

Dim v1 : v1 = #20:20:10#
Dim v2 : v2 = #20:20:10#

MsgBox (TimeValue(v1 + v2))

修改: -

AFAIK,即使您使用格式为FormatDateTime(date,format)的{​​{1}},也无法直接进行此类添加。您必须使用正常的加法和逻辑逻辑。印刷时间,分钟和时间然后如下面的代码

vbLongTime

答案 1 :(得分:2)

现在分钟和秒被标准化:

Sub SummingTimes()


  Dim v1: v1 = #8:32:33 PM#
  Dim v2: v2 = #8:32:33 PM#
  Dim hours As Variant
  Dim minutes As Variant
  Dim seconds As Variant
  Dim timetext As String


     seconds = Second(v1) + Second(v2)
      minutes = Int(seconds / 60)
       seconds = seconds - minutes * 60
        minutes = minutes + Minute(v1) + Minute(v2)
       hours = Int(minutes / 60)
      minutes = minutes - hours * 60
     hours = hours + Hour(v1) + Hour(v2)
   timetext = hours & ":" & minutes & ":" & seconds
  MsgBox timetext

End Sub

消息框显示41:5:6。如果您想获得41:05:06,则需要进行一些字符串操作。 Excel电子表格:http://www.bumpclub.ee/~jyri_r/Excel/Summing_hh-mm-ss.xls

答案 2 :(得分:1)

Excel中的日期在内部存储为自19/1/19以来的天数 因此1天= 1.
因此1小时= 1/24 根据这个逻辑,20小时+20小时返回一个日期,我预计将在1月21日下午4点(40-24)。 我不是VbScript的专家,但在VBA中,您可以使用自定义格式解决问题:
MsgBox Format(v1 + v2, "[hh]:mm")
hh周围的[]强制值将小时显示应用于整个值,而不仅仅是小数部分。

另一个解决方案是将时间值乘以24.返回“十进制小时数” MsgBox (#20:00# + #20:30#)*24会像您期望的那样返回40.5。