この記事は弊社の作業備忘録として掲載しています。
VBAで変数1と変数2をそれぞれ倍精度浮動小数点型で指定し、小数点計算をしようとすると以下のような不具合が出る。
不具合例
それぞれ消費税計算の要領で小数点計算をし、計算結果の「整数部分だけ」を取り出す(つまり全て小数点以下切り下げ)という計算をしようとすると・・・
変数1=192、変数2=25.50 で、消費税率10%として消費税計算をした場合
Int(192 * 25.50 * 10 / 100) =490 ・・・ 本当は489にならなければならない
変数1=3000、変数2=1.70で、消費税率10%として消費税計算をした場合
Int(3000 * 1.70 * 10 / 100) =509 ・・・本当は510にならなければならない
解決(対応)策・・・CDec関数を使う
Decimal型の変数を使えば対応できるがVBAではDecimal型の変数というのを宣言できない。
その代わりに「CDec()」という関数が用意されていて、「CDec(数値)」と書くとDecimal型の変数として数値を返してくれる。
この結果、例えば上記の不具合事例はどちらも
Int(CDec(192 * 25.50 * 10 / 100)
Int(CDec(3000 * 1.70 * 10 / 100)
と書くことで、正しい結果が得られる