【VBA】四捨五入は2種類ある【Round】

四捨五入には
 ・通常の四捨五入
 ・銀行丸めの四捨五入
の2種類があります!

四捨五入をする際は
 ・通常の四捨五入をすべきか
 ・銀行丸めの四捨五入をすべきか
を確認しましょう!
※どちらの四捨五入をするかによって結果が変わってきます。
※誤った四捨五入によるバグは「あるある」です。

PR

通常の四捨五入

「通常の四捨五入」は学校で習った四捨五入です。みなさんご存じのやつです。

「通常の四捨五入」では端数が
 ・0.5未満(0.1~0.4)の場合、切り
 ・0.5の場合、切り
 ・0.5以上(0.6~0.9)の場合、切り
します。

例えば
 ・14.1 ならば 14 ←切り
 ・14.5 ならば 15 ←切り
 ・14.6 ならば 15 ←切り
です。

VBAで「通常の四捨五入」をする場合は
 ・「WorksheetFunction」オブジェクトの「Round」メソッド
を使用します。

Sub sample()
    
    Debug.Print "14.1の通常の四捨五入:" & WorksheetFunction.Round(14.1, 0)
    Debug.Print "14.5の通常の四捨五入:" & WorksheetFunction.Round(14.5, 0)
    Debug.Print "14.6の通常の四捨五入:" & WorksheetFunction.Round(14.6, 0)
    
End Sub
通常の四捨五入
通常の四捨五入
PR

銀行丸めの四捨五入

基本的には「通常の四捨五入」と同じです。
ですが「端数が0.5」の場合のみ「通常の四捨五入」と結果が違います。

「銀行丸めの四捨五入」では端数が
 ・0.5未満(0.1~0.4)の場合、切り
 ・0.5の場合、四捨五入した結果が偶数になるように切りげ or 切り
 ・0.5以上(0.6~0.9)の場合、切り
します。

例えば
 ・14.1 ならば 14 ←切り
 ・14.5 ならば 14 偶数になるように切りげ。「通常の四捨五入」では切りげだが。
 ・14.6 ならば 15 ←切り
になります。

VBAで「銀行丸めの四捨五入」をする場合は
 ・VBA関数である「Round」関数
を使用します。

Sub sample2()
    
    Debug.Print "14.1の銀行丸めの四捨五入:" & Round(14.1, 0)
    Debug.Print "14.5の銀行丸めの四捨五入:" & Round(14.5, 0)
    Debug.Print "14.6の銀行丸めの四捨五入:" & Round(14.6, 0)
    
End Sub
銀行丸めの四捨五入
銀行丸めの四捨五入

「銀行丸め」は「偶数丸め」とも呼ばれています。

PR

まとめ

上記のまとめです。

通常の四捨五入
通常の四捨五入
銀行丸めの四捨五入
銀行丸めの四捨五入
通常の
四捨五入
銀行丸めの
四捨五入
14.11414
14.51514
14.61515
結果のまとめ
まとめ①

「通常の四捨五入」と「銀行丸めの四捨五入」で結果が違ってくるのは「端数が0.5」の場合のみ。

まとめ②

「端数が0.5」の場合、「銀行丸めの四捨五入」では四捨五入した結果が偶数になるように切りげ or 切りげをする。
※「通常の四捨五入」では「端数が0.5」の場合は必ず切りげだが、「銀行丸めの四捨五入」は場合により切りげ or 切りげ。

まとめ③

通常の四捨五入・・・・「WorksheetFunction」オブジェクトの「Round」メソッド
銀行丸めの四捨五入・・VBA関数である「Round」関数

PR

参考

上記のVBAコードで使用している以下の詳細は、公式サイトをご確認ください。

●「WorksheetFunction」オブジェクトの「Round」メソッド


●VBA関数である「Round」関数