在Excel中为零,但在VBA中不为零

在vba中,我操纵了2个范围来填充variablestypes的2个不同的二维数组,tempArr(,1)公式的数值结果(舍入为2dp),tempArr(,2)string数据types

我已经将数组复制到新的工作表中:

Dim tempArr(1 to 50, 1 to 2) as Variant Range("A1:A50") = tempArr Range("C1:C100") =tempArr1 

然后我有一个子程序来进行比较:

 Dim myRg as Range Dim myArr() as Variant Set myRg = Range("A1",Cells(lastrow,4)) myArr = myRg 

但是当我循环(I,J,K)通过数列A与列C试图匹配:

 If myArr(I,1)- myArr(J,3)-myArr(k,3) = 0 Then ' perform action 

…逻辑失败,只有一个例子,在Excel工作表中,计算显然是0,但在vba中,值是2.546E-09

第一个问题涉及为什么在Excel工作表中的数字是2dp将在VBA创build一个值,经过加/减计算,小数点后9位或更多。 或者是2.546E-09的结果是由别的东西引起的?

其次,我已经使用了变体types的数组来有效地处理这两种数据types,但是在执行math时可能不是最好的。 操作..将创build一个双数据types的variables是解决上述问题..? 我刚开始使用variables数组方法来处理范围数据,这已经大大加快了我的例程,但任何一般的build议,将不胜感激。 这是我的第一篇文章,请耐心等待。

2.546E-09 = 0.000000002546。 即使你正在做简单的算术,这个存在的原因只是浮点错误的本质。 在你的情况下解决这个最简单的方法是使你的比较0取整,如下所示:

 If Round(myArr(I,1) - myArr(J,3) - myArr(k,3), 0) = 0 Then