2016-03-25 27 views
5

は、次のVBA関数を考えてみましょう:イミディエイトウィンドウからそれを呼び出すこれはVBAのIsNumericおよびCDbl()関数のバグですか?

Function castAndAdd(inputValue As Variant) As Variant 

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

End Function 

は、この出力を与える:

"5,7" コールを通じてステッピング
?castAndAdd("5,7") 
61 
?castAndAdd("5, 7") 
5, 7 

、私はIsNumeric("5,7")戻りtrueことがわかります。ヨーロッパでカンマが小数点の区切り記号として使用されているため、この結果が得られた可能性があります。私は米国にいるのでこの結果は奇妙なので、ロケールはExcelがピリオドを小数点区切り文字として認識するだけであると判断する必要があります。

ヨーロッパ/米国の問題を脇に置いても、大きな問題は、CDbl( "5,7")が57を返すため、CDbl("5,7") + 4は、コンマが10進数の場合、セパレータ。これはバグですか、それともCDbl()の使い方が分かりませんか?

+0

'CDbl'は'、 'を' '" 'に置き換えた、つまりそれを削除すると思います。 – newguy

答えて

4

コンマは小数点として認識されず、桁区切り文字として認識されます。このメカニズムはそれほど賢明ではないので、少なくとも3桁の数字を入力する必要がありますが、本質的には数字の桁区切り記号を数字として解釈する際にはそれを取り除きます。

したがって、CDbl("4,5,,6,7")でも数字として4567が得られます。カンマが千単位の区切り文字である場合、これはすべて真です。いくつかのヨーロッパ諸国のように、ポイントが千単位のセパレータである場合、ポイントで同様のことが起こります。

+2

これは、[公式のドキュメント](https://msdn.microsoft.com/en-us/library/office/gg278896.aspx)からこの行の「正しく」定義されている興味深いスピンです。「異なる小数区切り文字、異なる区切り文字、およびさまざまな通貨オプションは、コンピュータのロケール設定に応じて正しく認識されます。 – Comintern

関連する問題