如何确定变量是否是VBA中的整数?

时间:2009-11-25 08:22:15

标签: vba excel-vba access-vba excel

我正在寻找一个优雅的解决方案来确定变量是否是VBA中的整数。不幸的是,如果变体是从字符串创建的,我就被卡住了。这是一个小测试脚本:

dim v as variant
v = "42"
if v <> round(v) then
   msgBox("<>")
end if

这里,msgBox会弹出,可能是因为变量是从字符串创建的,尽管我希望v是= round(v)。

4 个答案:

答案 0 :(得分:9)

你应该写一些类似的东西:

if cDbl(v) <> round(cDbl(v)) Then

其中cDbl是将任何数据转换为双类型数字的函数。在调用cDbl函数之前,您可能必须处理使用isNumeric()函数无法将v转换为数字的情况。您甚至可以使用cInt函数进行比较:

if isnumeric(v) then
    if cDbl(v) - cInt(v) <> 0 Then
    ....
    endif
else
   debug.print "data cannot be converted to a number"
endif

答案 1 :(得分:3)

Sub test()

    Dim v As Variant
    v = "42"
    If Val(v) <> Int(Val(v)) Then
       MsgBox ("<>")
    End If

End Sub

如果您使用Val(),它会尽力转换为数字。如果不能,那么它将返回零,在这种情况下,Val(v)将始终等于Int(Val(v))。

答案 2 :(得分:0)

如何检查地板功能是否与天花板功能匹配?

Private Function isWhole(value As Variant) As Boolean

    If WorksheetFunction.Ceiling_Math(value) = WorksheetFunction.Floor_Math(value) Then
        isWhole = True
    Else: isWhole = False
    End If

End Function

我遇到了类似的问题,此代码对我有用。

答案 3 :(得分:0)

如果我怀疑数字可能以字符串形式出现,我喜欢使用简单的+0技巧。例如索引/匹配的东西。像这样:

Model: "model_1"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_3 (InputLayer)            [(None, 3)]          0                                            
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 100)          400         input_3[0][0]                    
__________________________________________________________________________________________________
dense_2 (Dense)                 (None, 100)          10100       dense_1[0][0]                    
__________________________________________________________________________________________________
input_4 (InputLayer)            [(None, 4)]          0                                            
==================================================================================================
Total params: 10,500
Trainable params: 10,500
Non-trainable params: 0
__________________________________________________________________________________________________

这应该适用于日期,文本,数字,数字作为文本。不确定是否或何时中断,应该没问题。