VBA IsNumeric去野外

请解释为什么下面的代码是随机的

当下面的代码行返回TRUE时返回FALSE

?Isnumeric("555-")

?Isnumeric("555-"/2)返回TRUE

请解释一下IsNumeric随机行为?

尽pipe它有点深奥,尾部减号是有时在会计包中使用的有效数字格式。 我猜这个现在用的太less了。 它表示一个负数,例如555-是-555。 你的第二个例子工作,因为-555(或555-)可以除以2即-227.5(或227.5-)。

您可以在Excel UI中看到它允许格式作为“文本到列”的一部分:

在这里输入图像说明

另外,你可以设置一个数字格式来使用尾部负数:

#,##0;#,##0-

看到这个博客文章 。

来自微软 :

如果Expression的数据types是Boolean,Byte,Decimal,Double,Integer,Long,SByte,Short,Single,UInteger,ULong或UShort,或者包含这些数字types之一的对象,则IsNumeric返回True。 如果expression式是可以成功转换为数字的字符或string,它也会返回True。

如果expression式的数据types为Date或数据types为Object并且不包含数字types,则IsNumeric返回False。 如果expression式是不能转换为数字的字符或string,则IsNumeric返回False。

看起来它把“555-”解释为-555。 在检查IsNumeric之后,您可能会像这样检测到这种情况:

 Cstr(CLng("555-")) = "555-"