这是VBA的IsNumeric和CDbl()函数中的错误吗?

时间:2016-03-25 18:33:27

标签: excel vba excel-vba

考虑以下VBA功能:

Function castAndAdd(inputValue As Variant) As Variant

If IsNumeric(inputValue) Then
    castAndAdd = CDbl(inputValue) + 4
Else
    castAndAdd = inputValue
End If

End Function

从即时窗口调用它给出了这个输出:

?castAndAdd("5,7")
 61 
?castAndAdd("5, 7")
5, 7

单步调查“5,7”,我发现IsNumeric("5,7")会返回true。我想也许它会给出这个结果,因为在欧洲,逗号用作小数分隔符;这个结果很奇怪,因为我在美国,所以我的语言环境应该确定Excel只将句点识别为小数点分隔符,对吗?

即使我们搁置欧洲/美国问题,更大的问题是CDbl(“5,7”)返回57,因此CDbl("5,7") + 4返回61而不是9.7,正如我所预期的那样逗号是小数点分隔符。这是一个错误,还是我不理解如何使用CDbl()

1 个答案:

答案 0 :(得分:4)

逗号不会被识别为十进制,而是千位分隔符。该机制并不是那么明智,要求至少应该跟随三个数字,但基本上它会将数字分隔符中的任何一个解释为数字。

所以即使CDbl("4,5,,6,7")也会产生4567作为数字。当逗号是千位分隔符时,所有这些都是正确的。如果像在一些欧洲国家那样,点数是千位分隔符,那么点就会发生类似的事情。