在excel中为零但在vba中不为零

时间:2016-02-17 20:35:47

标签: excel vba math

在vba中,我操纵了2个范围来填充变体类型的2个不同2-d数组,tempArr(,1)公式的数值结果(舍入为2dp),tempArr(,2)字符串数据类型

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

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

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

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

...逻辑在一个实例中失败,在excel工作表中,计算显然为0,但在vba中,值为2.546E-09

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

其次,我使用了变量类型的数组来有效地处理2种数据类型,但在执行数学时可能不是最好的。操作。创建Double数据类型的变量是上述问题的解决方案..?我刚开始使用变量数组方法来操作范围数据,这大大加快了我的例程,但任何一般建议都会受到赞赏。这是我的第一篇文章,所以请耐心等待。

1 个答案:

答案 0 :(得分:2)

2.546E-09 = 0.000000002546。即使您进行简单的算术,这种情况的存在也只是浮点错误的本质。在你的情况下解决这个问题的最简单方法是使你的比较为0舍入,如下所示:

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