我正在使用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
这是非常有意义的。非常感谢!