如何在 Excel VBA 中减去时间? 我尝试减去这两个值,但得到的值是“2.1527777777778E-02”。这是什么意思?
时间 = 12/7/16 12:00:00 AM
超时 = 12/7/16 12:30:00 AM
这是我的代码示例。预先感谢。
Dim Total as Double
Dim Timein as Date
Dim Timeout as Date
Total = TimeValue(Timeout) - TimeValue(Timein)
'Result Total=2.1527777777778E-02
您可以使用 DateDiff 函数来获取年/日/秒或其他任何内容的差异。
这里是几分钟的例子。
Dim Timein As Date
Dim Timeout As Date
Timein = "12/7/16 12:00:00 AM"
Timeout = "12/7/16 12:30:00 AM"
Debug.Print DateDiff("n", Timein, Timeout)
输出:
30
间隔说明
yyyy 年
q 季度
月
y 一年中的哪一天
天
w 工作日
ww 周
小时
n 分钟
第二个
您所做的完全正确,从以下代码可以看出:
Sub test()
Dim Total As Double
Dim Timein As Date
Dim Timeout As Date
Timein = CDate(Range("A1").Value)
Timeout = CDate(Range("A2").Value)
Total = TimeValue(Timeout) - TimeValue(Timein)
Debug.Print Total
Debug.Print Format(Total, "hh:mm:ss")
Range("A3").NumberFormat = "hh:mm:ss"
Range("A3").Value = Total
Debug.Print "Number of hours = " & Total * 24
End Sub
正如vacip在评论中提到的,日期/时间变量以“天”为单位存储在VBA中,因此,例如,
Now
对我来说是数字42867.7513310185
。
2.1527777777778E-02
使用一种称为科学记数法的值显示方法。在您的情况下,这意味着 2.1527777777778
乘以 10
的 -2
次方。或者您可以将 E-02
部分视为将小数点向左移动两位(向左移动因为它是负数)。
所以:0.021527777777778
。
Excel 将时间(日期和一天中的时间)视为整日,因此半天(12 小时)将表示为
0.5
。
因此,结果本身代表一整天的小数部分,例如,如果您想要以分钟为单位,则可以将该值乘以
1440
(24 小时 x 60 分钟为一天),这将为您提供 31
分钟。
在您的示例中,您发现
12:00
和 12:30
之间的差异,因此您实际上应该得到 2.08333333333333E-02
的结果,如果乘以 1440
将为您提供 30
分钟。
Excel 为您提供了找到两个时间点之间差异的工具,尽管它消除了所有复杂的数学 -
DateDiff
并且 @holger 为您提供了编写自己的代码所需的一切。
您已将总计定义为 double,这将返回您的数字。您需要将总计调暗为日期,以便返回时间。
Dim Total as Date
Dim Timein as Date
Dim Timeout as Date
Total = TimeValue(Timeout) - TimeValue(Timein)
乘以 2.1527777777778E-02 x 24 x 60 x 60 = 1860 秒 24 小时 x 60 分钟 x 60 秒