VBA IsNumeric 变得疯狂

VBA IsNumeric going WILD

请解释为什么下面的代码会随机运行

下面的代码行 returns TRUE 当它应该有 return FALSE

?Isnumeric("555-")

还有

?Isnumeric("555-"/2) returns TRUE

请解释 IsNumeric 的随机行为?

它似乎将“555-”解释为 -555。 检查 IsNumeric 后,您可能会检测到这种情况:

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

来自Microsoft

IsNumeric returns True if the data type of Expression is Boolean, Byte, Decimal, Double, Integer, Long, SByte, Short, Single, UInteger, ULong, or UShort, or an Object that contains one of those numeric types. It also returns True if Expression is a Char or String that can be successfully converted to a number.

IsNumeric returns False if Expression is of data type Date or of data type Object and it does not contain a numeric type. IsNumeric returns False if Expression is a Char or String that cannot be converted to a number.

虽然有点深奥,但尾随减号是有时在会计包中使用的有效数字格式。我想现在用得不多了。它表示负数,例如555-是-555。您的第二个示例有效,因为 -555(或 555-)可以除以 2,即 -227.5(或 227.5-)。

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

此外,您可以设置数字格式以使用尾随负数:

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

看到这个blog-post