VBAに限らずコンピュータであれば演算誤差は起こる。
演算誤差の有無は、仕様を決めた人と数式とかプログラム書く人に委ねられる。
最近は誤差のこと忘れてた(笑)
同じ動作のプログラムを2つ用意。違うのは変数だけ。
Sub 演算誤差の確認() Dim d As Double: d = 0 Do While d < 0.1 d = d + 0.01 Loop Debug.Print "Double型", d Dim c As Currency: c = 0 Do While c < 0.1 c = c + 0.01 Loop Debug.Print "Currency型", c End Sub
イミディエイトウィンドウ
Double型 0.11 Currency型 0.1
残念ながらVBAにDecimalは無いので、Currency(通貨型)を使用。計算時にキャストしても回避できる。
Currency型は整数部15桁、小数部4桁の固定小数点型変数とのこと。よく調べてから使いましょう。
'Currency型にキャスト d = d + 0.01@ d = d + CCur(0.01)
以上。