組込関数 Round

数値・数学関数

VBA(Visual Basic for Applications)の組み込み関数 Round は、数値を指定した小数点以下の桁数に四捨五入するための関数です。しかし、Excelのワークシート関数 ROUND と異なり、VBA の Round は 「銀行丸め(Banker’s Rounding)」という特有の丸め方式を採用しているため、特に「.5」の処理に関して誤解や混乱が起きやすい関数でもあります。


■ 1. Round関数の概要

Round 関数は、与えられた数値を指定した小数点以下の桁数に丸める関数です。通常の四捨五入と思われがちですが、実際には「偶数丸め(Banker’s Rounding)」という統計的に偏りのない丸め方式を採用しており、これが Excel の ROUND 関数との最大の違いです。


■ 2. 構文と使用方法

Round(expression, [numdecimalplaces])

パラメータ:

  • expression: 丸めたい数値(必須)
  • numdecimalplaces: 小数点以下の桁数(省略可能、既定値は0)

戻り値:

  • 指定された小数点以下の桁数に四捨五入された値(Double 型)

■ 3. 基本例

例1:整数への四捨五入

MsgBox Round(2.4)   ' → 2
MsgBox Round(2.5) ' → 2 (←ここが重要!)
MsgBox Round(3.5) ' → 4

この挙動に驚いた方も多いかもしれません。Round(2.5) が「2」になるのは、Banker’s Rounding だからです。


■ 4. Banker’s Rounding(偶数丸め)とは?

通常の四捨五入(いわゆる算術丸め)では、「5以上は切り上げ、未満は切り捨て」というルールに従います。一方、Banker’s Rounding(偶数丸め)では、端数が正確に.5のときに、最も近い偶数に丸めるというルールが採用されます。

例:

入力値算術丸めBanker’s Rounding (VBAのRound)
2.532
3.544
4.554
5.566

これは、統計的に丸め誤差を最小限に抑えるために採用されている手法であり、金融・会計などで使われることもあります。


■ 5. 少数点以下の桁指定

例:

MsgBox Round(3.456, 2)  ' → 3.46
MsgBox Round(3.454, 2) ' → 3.45
MsgBox Round(3.455, 2) ' → 3.46(5のときは偶数方向)
MsgBox Round(3.465, 2) ' → 3.46

■ 6. 他の関数との比較

関数丸め方式特徴
Round(VBA)偶数丸めデフォルトで Banker’s Rounding
WorksheetFunction.Round算術丸めExcelワークシートと同じ処理
Fix小数点以下切り捨て0方向に切り捨て
Int小さい方向に切り捨て負の数に注意
FormatNumber表示上の丸め数値は変化しない

■ 7. WorksheetFunction.Roundとの違い

VBAで Excel ワークシートの ROUND 関数を使いたい場合は WorksheetFunction を使います。

MsgBox Application.WorksheetFunction.Round(2.5, 0)  ' → 3
MsgBox Round(2.5, 0) ' → 2(VBAのRound関数)

同じ「Round」でも挙動が異なるため、使用目的に応じて使い分けが重要です。


■ 8. 応用例

● 金額の端数処理(消費税など)

Dim 金額 As Double
金額 = 1234.5678
MsgBox Round(金額, 2) ' → 1234.57

● 統計データの集計時の丸め誤差削減

大量のデータに四捨五入を繰り返すと、偏りが累積します。Banker’s Rounding はこの問題を軽減するため、集計業務で有効です。


■ 9. 注意点

● .5の扱いに注意!

Round(2.5)3 ではなく 2 になるのは、VBAにおける最も混乱されがちな仕様です。この挙動は意図的であり、誤りではありません。

もし常に「5以上は切り上げ」にしたい場合は、独自の四捨五入関数を定義する必要があります。

独自四捨五入関数の例:

Function NormalRound(val As Double, Optional digits As Integer = 0) As Double
NormalRound = Int(val * 10 ^ digits + 0.5) / 10 ^ digits
End Function

' 使用例
MsgBox NormalRound(2.5) ' → 3

■ 10. 使用場面のまとめ

使用場面Round関数の利点
金融業務偶数丸めにより誤差が分散される
データ分析大量のデータの平均・合計で精度確保
小数処理小数桁数の明確な調整
見積・請求処理金額の見た目を整える

■ 11. まとめ

VBAの Round 関数は、単なる四捨五入ではなく、「偶数丸め(Banker’s Rounding)」という方式を採用した高度な丸め関数です。このため、見慣れた「.5 → 切り上げ」とは異なる結果になる点に注意が必要です。

  • 「誤差を偏らせない」ことを目的とした設計であり、金融・統計・科学計算などに適している。
  • Excelとの互換性を求める場合は WorksheetFunction.Round を使用する。
  • 独自の四捨五入が必要であれば、カスタム関数を作成する。

VBAの Round を正しく理解し、使いこなすことで、より正確かつ意図通りの数値処理が可能になります。

タイトルとURLをコピーしました