如何在Excel VBA中减去时间?

如何在Excel VBA中减去时间? 我试图减去这两个值,但我得到这个值“2.1527777777778E-02”而不是。 这是什么意思?

Timein = 12/7/16 12:00:00 AM

超时= 12/7/16 12:30:00上午

这是我的代码示例。 提前致谢。

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年

季度

m月

一年的日子

d日

周日

周ww

h小时

n分钟

2.1527777777778E-02正在使用显示名为Scientific Notation的值的方法。 在你的情况下,意味着2.1527777777778乘以10-2次幂。 或者你可以把E-02部分看成是把小数点左移两位(左是因为是负数)​​。 所以: 0.021527777777778

Excel将整天的时间(date和时间)视为整天,所以半天(12小时)将表示为0.5

因此,结果本身就是一整天的小数部分,如果你想在几分钟内得到这个数字,例如,你可以乘以1440 (24小时x 60分钟做一天),这会给你31分钟。

在你的例子中,你发现在12:0012:30 12:00 12:30之间的差异,所以你应该得到2.08333333333333E-02的结果,如果乘以1440会给你30分钟。

Excel为您提供了查找两个时间点之间的差异的工具,尽pipe这样可以将所有复杂的math运算 – DateDiff和@holger已经为您提供了编写自己的代码所需的一切。

您已将总数定义为double,这会返回您的数字。 你需要将date变暗,以便返回一次。

 Dim Total as Date Dim Timein as Date Dim Timeout as Date Total = TimeValue(Timeout) - TimeValue(Timein) 

你所做的是完全正确的,如下面的代码所示:

 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 

正如在评论中提到的,date/时间variables存储在VBA中的“天”,所以,例如, Now对我来说是数字42867.7513310185