VBA中If判断时两个数组元素值不相等的原因及类型转换方法
问题原因
Split函数拆分字符串返回的数组所有元素均为字符串类型,而Array(2,3,4)生成的数组元素为数值类型,二者类型不一致,直接做相等判断会返回假,因此弹出NO。
解决方法
方案1:判断时临时转换类型(无需修改数组原有结构)
在相等判断时用CInt()函数将字符串类型的数组元素转为整型即可,仅需修改判断行代码:
If CInt(A_arr(0)) = B_arr(0) Then MsgBox "YES" Else MsgBox "NO" End If
修改后运行即可弹出YES。如果要转长整型可以用CLng(),转通用数值可以用Val()。
方案2:批量转换A_arr全部元素为整型
如果后续需要多次使用A_arr的数值属性,可以拆分后遍历数组逐个转换类型,完整修改代码如下:
Private Sub aaa() Dim A As String, A_arr As Variant, B_arr As Variant Dim i As Integer A = "2,3,4" A_arr = Split(A, ",") ' 遍历数组逐个转整型 For i = LBound(A_arr) To UBound(A_arr) A_arr(i) = CInt(A_arr(i)) Next i B_arr = Array(2, 3, 4) If A_arr(0) = B_arr(0) Then MsgBox "YES" Else MsgBox "NO" End If End Sub
注意:如果拆分出来的字符串不是合法数值,
CInt转换会抛出错误,建议转换前先用IsNumeric()函数判断元素是否为合法数值。
内容的提问来源于stack exchange,提问作者Atipong Chamnanjan
相关产品推荐
相关产品推荐

