つらつら Excel VBA

私の備忘録です。

演算誤差

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)

以上。