使用double not working-VBA excel处理错误
我有一个简单的错误检查问题。在我的潜艇开始时,我要确保一个范围加起来是100%。为此,我使用Range.value获取单元格“F3”的值,并将其存储为double。F3包含检查另一个范围的求和公式 我可以看到在locals窗口中double的值是1(因为这些值加起来是100%),但是,代码仍然进入下面的If语句并退出sub使用double not working-VBA excel处理错误,vba,excel,sum,double,Vba,Excel,Sum,Double,我有一个简单的错误检查问题。在我的潜艇开始时,我要确保一个范围加起来是100%。为此,我使用Range.value获取单元格“F3”的值,并将其存储为double。F3包含检查另一个范围的求和公式 我可以看到在locals窗口中double的值是1(因为这些值加起来是100%),但是,代码仍然进入下面的If语句并退出sub Sub dataCollection() 'Define sheets Dim ipt As Worksheet Set ipt = Sheets("Input form"
Sub dataCollection()
'Define sheets
Dim ipt As Worksheet
Set ipt = Sheets("Input form")
'Check that allocation is 100%
Dim alloc As Double
alloc = ipt.Range("F3").Value
If alloc <> 1 Then
MsgBox "Error, allocation does not equal 100%"
Exit Sub
End If
...
End Sub
子数据收集()
'定义工作表
将ipt作为工作表
集合ipt=表格(“输入表格”)
'检查分配是否为100%
双色差
alloc=ipt.范围(“F3”).值
如果alloc 1那么
MsgBox“错误,分配不等于100%”
出口接头
如果结束
...
端接头
以这种方式使用double是一个问题吗?在计算机语言中使用
double
或任何浮点数是一个众所周知的问题。因此,永远不要比较双值。或者,在这样做的时候,你应该小心。在您的情况下,请使用以下内容:
如果Abs(alloc-1)>0.000000001,则
更多阅读:
通常,要了解发生了什么,请在新的excel工作簿中尝试以下代码:
Option Explicit
Public Sub TestMe()
Dim cntSum As Double
Cells.Clear
Cells(1, 1) = 0.3
Cells(2, 1) = 0.2
Cells(3, 1) = 0.2
Cells(4, 1) = 0.2
Cells(5, 1) = 0.1
cntSum = Cells(1, 1) + Cells(2, 1) + Cells(3, 1) + Cells(4, 1) + Cells(5, 1)
Debug.Print cntSum
Debug.Print cntSum = 1
Debug.Print cntSum - 1
End Sub
您将在控制台中看到以下内容:
1
False
-1,11022302462516E-16
这意味着cntSum
是1
(第一行),但它不等于1(第二行),它与1之间的绝对差是-1,11~E-16
在Excel中,解决这一问题的一种方法是使用Currency
格式。添加此行:
Range("A1:A5").Style = "Currency"
在单元格之后。清除代码并再次运行。现在结果不同了