1

そのため、1 日の大半を VBA クラス モジュールのデバッグに費やしていたところ、懸念すべき現象に遭遇しました。

メインのスプレッドシートには、小数点以下 9 桁の精度で「通貨」として書式設定されたセルがあります。私の VBA クラスには、インスタンス化の際にそのセル値を取る属性 (double) があります。つまり、

myClass.loanDefault_7 = Range("loanDefaults")(1,7)

ただし、割り当て後に myClass.loanDefault_7 に格納されている値を確認すると、小数点以下 4 桁の精度しかありません。

私の質問は、VBA が自動的に (私の許可なしに) この値を切り捨てるのはなぜですか? なぜこのようなことが起こるのか、また将来どのように防ぐことができるのかを理解したいと思っています。

どんな助けでも大歓迎です!

4

1 に答える 1

4

Value2代わりにプロパティを使用してみてください。

myClass.loadDefault_7 = Range("loadDefaults")(1,7).Value2

MSDN から:

このプロパティと Value プロパティの唯一の違いは、Value2 プロパティが Currency および Date データ型を使用しないことです。Double データ型を使用すると、これらのデータ型でフォーマットされた値を浮動小数点数として返すことができます。

プロパティは自動的に値を Currency データ型に変換するようValueです (これは、小数点以下 4 桁までしか表現できません)。

于 2013-04-08T13:39:29.850 に答える