VBA正确比较时间



我正在使用VBA从电子表格进行两次比较。我是我的示例,实际值形成了两个单元格中23:00。我将它们用于if stitegent,这些值都来自类型变体的两个不同数组。

if dataArr(v1) = rowArr(v2) Then

如果我调试两个值,则显示这样的两个值

0,958333333333333/0,9583333333333333

它们看起来一样

所以我减去了两个值以查看结果是否为零。

dataArr(v1) - rowArr(v2)

在这种情况下,结果不是零,而是

3,3306907387547E-16

因此,与代表时间的比较或两个双重值有问题。

我发现的唯一工作解决方案是通过

将它们转换为字符串值
CStr(dataArr(v1)) = CStr(rowArr(v2))

返回原状的

我真的不喜欢这种解决方案,因为它并不是真正的工作方式。我还调查了在比较中最终发生的值之前会发生什么,但我找不到任何错误。实际上,DataArr中的所有值都来自电子表格(ListObject.databodyrange.value),然后将某些值复制到DataArr中的Rowarr,因此它确实应该是相同的值。

有什么建议吗?谢谢!

如果单元格实际上是为时间而不是字符串格式化,我会将数组的定义作为"日期"而不是"变体"。

然后,您将拥有所有日期/时间相关的VBA功能(例如datediff())。

有时浮点不准确。如果要比较,请进行减法的绝对值(ABS),看看它是否低于公差水平,例如1E-7(1E-7)(百万分之一)。

多亏了佛罗伦萨B,我得到了一个可行的解决方案!

佛罗伦萨B:要比较两个日期的平等,您需要将精确度为24小时x 60分钟x 60秒

所以解决方案是:

If Round(dataArr(v1) * 86400) = Round(rowArr(v2) * 86400) Then

这是非常有意义的。非常感谢!

相关内容

  • 没有找到相关文章

最新更新