3

我想计算出自指定日期和时间以来的当前时间。

如果指定的数据是:19/01/2013 16:44:00
现在时间是:19/01/2013 16:45:00

差异是 0 年 0 个月 0 天 0 小时 1 分钟 0 秒

这可以很容易地通过获取当前时间并减去以前的时间并格式化它来完成,但这很难处理数据所以我想要做的是将每个日期/时间段分成自己的单元格

假设单元格 A1 有以前的时间,单元格 A2 有当前时间

单元格 a5 到 f5 将包含 0 年 0 个月 0 天 0 小时 1 分钟 0 秒

关于这个问题的第二个注意事项是否可以=NOW()通过 VBA 强制每 x 秒更新一次而无需交互?

4

3 回答 3

3

您不能使用YEAR函数来获取年份差异,因为这将在 2012 年 12 月 31 日和 2013 年 1 月 1 日之间给出 1 年,而只有一天.....

....类似地,您可能会遇到 MONTH 和 DAY 的问题(例如,MONTH 总是返回 1 到 12 之间的数字,而在这种情况下,您只会期望 0 到 11 之间的数字)

然后尝试DATEDIF前 3 个HOUR,正如贾斯汀建议的MINUTE那样SECOND

假设 A2 中的开始日期/时间和 B2 中的结束日期/时间分别为年、月、日、小时、分钟和秒尝试这些公式

=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"y")

=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"ym")

=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"md")

=HOUR(B2-A2)

=MINUTE(B2-A2)

=SECOND(B2-A2)

将所有单元格格式化为一般格式

由于月/年长度不同,您可能会遇到一些差异......

于 2013-01-30T18:58:16.263 回答
1

使用A5 = Year(A1)-Year(A2)

使用

Year(...) Month(...) Day(...) Hour(...) Minute(...) Second(...)

有关基于计时器创建自更新工作表的更多详细信息,请查看这两个 帖子并设置计时器以执行该Worksheet.Calculate方法。

于 2013-01-30T17:29:27.593 回答
0
Private Sub CommandButton1_Click()
    DoDateA
End Sub

Sub DoDateA()
    Dim D1 As Date, D2 As Date, DC As Date, DS As Date
    Dim CA: CA = Array("", "yyyy", "m", "d", "h", "n", "s", "s")
    Dim Va%(7), Da(7) As Date, Ci%
    D1 = Now + Rnd() * 420  ' vary the  * factors for range of dates
    D2 = Now + Rnd() * 156
    If D1 > D2 Then
        [b4] = "Larger"
    Else
        [b4] = " smaller"
        DS = D1
        D1 = D2
        D2 = DS
    End If
    [d4] = D1
    [e4] = D2
    DC = D2
    For Ci = 1 To 6
        Va(Ci) = DateDiff(CA(Ci), DC, D1)
        DC = DateAdd(CA(Ci), Va(Ci), DC)
        Va(Ci + 1) = DateDiff(CA(Ci + 1), DC, D1)
        If Va(Ci + 1) < 0 Then  ' added too much
            Va(Ci) = Va(Ci) - 1
            DC = DateAdd(CA(Ci), -1, DC)
            Cells(9, Ci + 3) = Va(Ci + 1)
            Cells(8, Ci + 3) = Format(DC, "yyyy:mm:dd hh:mm:ss")
        End If
        Da(Ci) = DC
        Cells(5, Ci + 3) = CA(Ci)
        Cells(6, Ci + 3) = Va(Ci)
        Cells(7, Ci + 3) = Format(Da(Ci), "yyyy:mm:dd hh:mm:ss")
        Cells(10, Ci + 3) = DateDiff(CA(Ci), D2, D1)
    Next Ci
End Sub
于 2016-02-07T10:45:53.207 回答