VBAで四捨五入をする関数についの備忘録。
VBAで多数の数値を四捨五入するような場合、
①ワークシート関数「Round」の利用
②VBAのRound関数の利用
代表的なものは二通り。
ただし、この①、②には違いがあるということ。
セルA1に入力された少数を、整数値に四捨五入する場合で試してみます。
①のワークシート関数使用例
Sub sample1()
MsgBox Application.WorksheetFunction.Round(ActiveSheet.Range(“A1”), 0)
End Sub
②のVBAのRoud関数の使用例
Sub SAMPLE2()
MsgBox Round(ActiveSheet.Range(“A1”), 0)
End Sub
結果
セルA1の値 | ①の結果 | ②の結果(偶数丸め) |
1.4 | 1 | 1 |
1.5 | 2 | 2 |
1.6 | 2 | 2 |
2.4 | 2 | 2 |
2.5 | 3 | 2 |
2.6 | 3 | 3 |
3.4 | 3 | 3 |
3.5 | 4 | 4 |
3.6 | 4 | 4 |
4.4 | 4 | 4 |
4.5 | 5 | 4 |
4.6 | 5 | 5 |
という具合に、丸め方に違いが出てきます。
VBAのRound関数は「偶数まるめ」という丸め方なのです。(「銀行丸め」とも)
ご覧のとおり、普通の四捨五入では2.5→3、4.5→5になるはずですが、偶数まるめは端数が0.5のとき、結果が偶数になる方に丸める、と定められていて、四捨五入よりは望ましいということです。
四捨五入は端数が0.5より小さければ切り捨て、0.5より大きければ切り上げ、0.5の場合も切り上げということで、計算結果に偏りが生じる可能性が大きいということ。
結果が偶数・奇数で0.5の端数を切り捨てたり切り上げ足たりすることで、うまく相殺しているということらしいです。