VBA Double类型的判定
Cemon_Liu Lv4

VBA Double类型的判定

VBA double类型不能用等于来判定

今天在处理一个数据值判定时遇到的问题,即在Excel里面有一个位数很多的数值。由于一些逻辑设定,我需要让它和另外一个值去判定是否相等。结果即使debug.print(x)出来的值是一样,在循环判定也不判定相等。

和Chatgpt讨论了一下。给出的建议是设定一个很小的值,然后用两个对比的值的差和设定值比较来判定是否相等。范例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Dim num1 As Double
Dim num2 As Double
Dim epsilon As Double

num1 = 1.23456789
num2 = 1.23456788
epsilon = 0.00000001 ' 设置误差范围

If Abs(num1 - num2) < epsilon Then
Debug.Print "num1 and num2 are equal"
Else
Debug.Print "num1 and num2 are not equal"
End If

修改逻辑

  1. 尝试使用类型函数转换

传入的数据有字符型或者数值型。所以第一想法是判定数值型然后将数值型转换为字符型再进行比较。用到的两个函数。

1
2
3
4
VarType(data) 判断变量类型 返回的是数值,其中5double类型

Cstr(data) 类型转换,将数值转为文本类型

在实际执行过程中,发现转换后的值依然存在问题,即excel会自动将类似数值的数据转换为科学计数法

  1. 强制类型转换

这个方法在excel里面也经常使用,即当我们输入很长一段数字,比如身份证件号码时,我们可以在前面加 单引号,Excel自动转化为文本格式。所以逻辑为判定为数值,则加单引号。

1
2
3
If VarType(Range("E" & i)) = vbDouble Then
Range("E" & i) = "'" & Range("E" & i)
End If
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量