如何使用Excel VBA比较时间

jm81lzqq  于 2023-08-08  发布在  其他
关注(0)|答案(5)|浏览(133)

我在一个单元格中有一个日期值(假设A1),我想使用VBA检查该日期的时间是否大于或小于特定时间(假设13小时)。我怎么能这么做呢?我试探着:

if Cells(1,1)<TimeValue("13:00:00") then
'Something
end if

字符串
但那不管用。
另外,如果我想得到一个时差,例如我想知道13:00:00和13:10:00(10分钟)之间的差异,我该怎么做?

l7mqbcuq

l7mqbcuq1#

if TimeValue(Cells(1, 1).Value) < TimeValue("13:00:00") then

字符串
应该可以

2ul0zpep

2ul0zpep2#

Sub time()
If TimeValue(Cells(1, 1)) < TimeValue("1:00:00") Then
MsgBox ("Yes")
Else
MsgBox ("No")

End If

End Sub

字符串
这里有一个完整的例子,你不能比较一个整数与一个字符串的整数值只能与一个具有相同的数据类型,即整数只比较类似的时间值可以与时间值(S)只比较。谢啦,谢啦

v64noz0r

v64noz0r3#

所提出的使用TimeValue()的解决方案可能会遇到舍入误差,这在某些情况下会导致不正确的比较,例如当序列值中的1 E-17差异使2个时间值被视为不同时。
碰巧时间序列号实际上是一个Double,所以它是一个浮点数据类型,自然具有不精确性。
我发现避免任何舍入错误的最佳解决方案是比较格式字符串,方法是仅使用对应用程序重要的日期/时间部分对其进行格式化。您可以将其与TimeValue结合使用以获得正确的比较

示例:

'Answer to OP question:
if TimeValue(Cells(1, 1).Value) < TimeValue("13:00:00") and _
Format(cells(1,1), "hh:mm:ss") <> Format(TimeValue("13:00:00"),"hh:mm:ss") then

字符串
这样你就可以保证,如果时间相等,但有一个微小的舍入差异,他们不会被认为是不同的。

以及日期/时间之间的“等于”比较的一些示例:

'Compare 2 date/time variables
Format(datetime1, "dd/mm/yyyy hh:mm:ss") = Format(datetime2,"dd/mm/yy hh:mm:ss")

'Compare 2 date/time variables where seconds are not important
Format(datetime1, "dd/mm/yyyy hh:mm") = Format(datetime2,"dd/mm/yy hh:mm")

'Compare a cell time to a constant time
Format(cells(1,1), "hh:mm") = Format(TimeValue("13:00:00"),"hh:mm")
Format(cells(1,1), "hh:mm") = Format(TimeSerial(13,0,0),"hh:mm")

'Compare a cell date to a constant date
Format(cells(1,1), "dd/mm/yyyy") = Format(DateSerial(2020,12,20), "dd/mm/yyyy")

pcww981p

pcww981p4#

下面的代码从范围A1和A2中获取时间值,并显示A3中的差异。只是为了给予你一个公平的想法,它是如何工作的,谢谢

Sub timegap()
Range("A1:A3").NumberFormat = "hh:mm:ss;@"

Cells(3, 1).Value = Cells(1, 2).Value - Cells(1, 1).Value
On Error GoTo here:

here:
Cells(3, 1).Value = Cells(2, 1).Value - Cells(1, 1).Value

End Sub

字符串

b1uwtaje

b1uwtaje5#

debug.Print CDate("2000-01-01 23:59:59") > CDate("2000-01-02 00:00:01")

字符串
假的

debug.Print CDate("2000-01-01 23:59:59") - CDate("2000-01-02 00:00:01")


-2.31481535593048E-05

debug.Print (CDate("2000-01-01 23:59:59") - CDate("2000-01-02 00:00:01")) * 24 * 60 * 60


-2.00000046752393

相关问题