Excel 如何确定从字符串创建的变量是否为整数?

Excel 如何确定从字符串创建的变量是否为整数?,excel,vba,ms-access,Excel,Vba,Ms Access,我希望确定从字符串创建的变量是否为整数 下面是一个测试脚本: dim v作为变量 v=“42” 如果v轮(v)那么 msgBox(“”) 如果结束 弹出msgBox,可能是因为变量是从字符串创建的,尽管我希望v=round(v)。您应该编写如下内容: if cDbl(v) <> round(cDbl(v)) Then 如果cDbl(v)轮(cDbl(v))那么 其中,cDbl是将任何数据转换为双精度数字的函数。在调用cDbl函数之前,您可能必须使用isNumeric()函数处理

我希望确定从字符串创建的变量是否为整数

下面是一个测试脚本:

dim v作为变量
v=“42”
如果v轮(v)那么
msgBox(“”)
如果结束

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

您应该编写如下内容:

if cDbl(v) <> round(cDbl(v)) Then
如果cDbl(v)轮(cDbl(v))那么
其中,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
如果是数字(v),则
如果cDbl(v)-cInt(v)0,则
....
恩迪夫
其他的
debug.print“数据无法转换为数字”
恩迪夫
子测试()
Dim v作为变体
v=“42”
如果Val(v)Int(Val(v)),那么
MsgBox(“”)
如果结束
端接头

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

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

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

我有一个类似的问题,这段代码对我有效。

如果我怀疑数字可能是字符串,我喜欢使用简单的+0技巧。例如,索引/匹配内容。像这样:

Dim v As Variant
v = "42"

If IsNumeric(v) Then
    If v + 0 <> Round(v + 0) Then
       MsgBox ("<>")
    End If
End If
Dim v作为变量
v=“42”
如果是数字(v),则
如果v+0轮(v+0),则
MsgBox(“”)
如果结束
如果结束

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

好吧,我的主张是“编写类似的代码”,而不是“这是保证的防弹代码”,但主要思想就在这里,即使它需要一些额外的测试。对不起,但我不得不说-1,即使考虑到你对“类似的东西”的警告。你的两个答案在编码时都有错误。如果你展示代码,它应该是正确的,而不是把发现bug作为一种练习。-1用于防御而不是改进。如果您只使用Clng而不是CInt,那么这个示例是很好的。。。我还应该补充一点,我不会放弃我的任何权利,其中包括在发表关于stackoverflow的答案和评论时捍卫我立场的权利!对不起,伙计们,我真的觉得你们“被冒犯”的立场太过分了。“如果你有一个比我更好的答案或建议,为什么不把它贴出来呢?”PhilippeGrondier在读了评论之后,我对人们竟敢否决你的优秀答案感到失望。你以我需要的精神回答了我的问题,我对此非常满意。如果你真的需要处理任何变量和任何整数,也许值得问问你自己。1000位的字符串怎么样?那么长距离范围之外的整数倍呢?如果你能准确地描述出你所需要的东西,然后编写代码,那就容易多了。这不是同一个问题,但请参见Eric Lippert对Stackoverflow上另一个问题的回答:
Dim v As Variant
v = "42"

If IsNumeric(v) Then
    If v + 0 <> Round(v + 0) Then
       MsgBox ("<>")
    End If
End If