VBA Round関数で四捨五入されない場合の解決方法
VBAでRound関数で四捨五入されない場合の解決方法です。

ExcelでRound関数を使って四捨五入するってのは、実務では毎日のようにおこなわれていることですね。ところが、VBAでRound関数を使って四捨五入すると、Excelの結果と一致しないという問題が発生しました。
具体的には Round(5780 * 0.025) という計算をして、結果が 144 となりました。Excelでは 145 となるのに、あれ?おかしいなっと。
ここでは VBAでRound関数で四捨五入されない場合の解決方法 を紹介します。
VBAのRound関数の仕様
実は、VBAのRound関数は四捨五入をする関数ではなかったんですよ。えー?!って思いますよね。普段Excelで表計算している人は、ウソだろ?!って疑いたくなりますよね。
はい、でも本当です。VBAのRound関数は、4以下は切り捨て、5以上は切り上げという仕様ではなく、あくまで数値を丸める関数なのです。
この仕様は「通貨型丸め」とか「銀行型丸め」などと呼ばれいます。これにより 0.5 のときは結果が偶数になるように丸められます。
銀行家の丸め / 偶数への丸め (Banker's Rounding)
端数が0.5の場合、最も近い偶数になる方へ丸める方法。0.5ちょうどが続く場合に、切り上げと切り捨ての偏りをなくすために用いられる。
(例:2.5 → 2、3.5 → 4)
別名:JIS丸め、五捨五入、偶捨奇入。
端数処理 - Wikipedia
なので、今回の Round(5780 * 0.025) に対しては、144.5 が丸められて 144 になったということですね。
このことを知らないままマクロ開発して、Excel計算と一致しているか検証すると痛い目にあいます。はい、筆者は痛い目をみました。
VBAで四捨五入する方法
はい、VBAのRound関数では四捨五入することはできないということがわかりましたね。なので代替品で対応しましょう。VBAで四捨五入する方法はいくつかあります。
Excelワークシートの関数を使う
Excelワークシートの関数を使って四捨五入をおこないます。
’ 小数点第2位で四捨五入する場合
Dim result As Double
result = Application.WorksheetFunction.Round(123.456, 1) ' 123.5
これならExcelと比較してもアンマッチになることはありませんね。
Format関数を使う
Format関数で表示形式を指定すれば四捨五入することができます。
Dim result As Double
result = Format(1.5, "0") ' 2
ふむ、こちらも覚えておいて損はないですね。
まとめ
VBAでRound関数で四捨五入されない場合の解決方法を紹介しました。
銀行家の丸めとか偶数丸めなんて言葉、初めて聞きました。金融業界では日常に使う言葉なんでしょうかね、知らんけど。
とりあえずVBAで四捨五入できてよかったよかった。
おつかれさまでした。