VBAに限ったことではないが、小数点以下の数字に高い精度が求められる場合には、内部的に浮動小数点のデータ型、VBAでは Single や Double は使ってはいけない。


小数点以下の値を保障されている型として、Currency 型があるが、勝手に通貨記号が付加されたりするそうで、あまり評判がよろしくない。っていうのも十数年前の情報で、それ以降使ったことはない。


そこで Decimal 型と使うことがある。ただ、この型は特殊である。


まず、Dim a As Decimal という定義ができない。VB.netではこの記述ができるらしいのだが、VBAではエラーになる。ではどうすればいいのか?Decimal で 使いたい場合、Variant 型で定義するのだ。そこに CDec 関数で値を代入すると、Decimal 型として使える、というもの。


Tomcatのログを解析し、機能ごとの処理時間を計測する際に 上記の方法でDecimal 型を利用したのだが、計算ミスなく利用できた。


ただ、小数点位置を「ここ」と定義できない。実務上は極端に大きな値と極端に小さな値を計算することはないのだろうけれど、どういう仕様なのか分かっていないと意図せぬ動きがおきないとも限らない。


正直なところ、こんなけったいな型、使いにくくて仕方がない。


クラスモジュールなどでラッピングして使うのが正しいのか、ちょっと研究してみたいと思う。


あまり小数点以下のものを使ったことはないので情報を持っていないのだが、ご存知の方がいれば突っ込みをお願いしたい。