小数点以下の桁数を指定して丸める
VBAのRoundとExcelのWorksheetFunction.Roundを比較し、端数がちょうど半分のときの違いを確認します。
実行前に確認
- VBAのRoundは銀行丸めです。ちょうど中間の値では偶数側へ丸めるため、一般的な四捨五入と結果が異なる場合があります。
- 小数を計算するDoubleには2進数での誤差があります。金額などは必要な丸め規則と境界値を確認してください。
- 丸める処理は値を変えます。見た目の表示桁数だけを揃える処理とは別です。
- Excel実機での動作は未確認です。コピーした練習用ブックで試してください。
1サンプルコード
Option Explicit
Sub Example7069()
Dim value As Double
Dim result As String
value = 2.5
result = "VBA Round(2.5, 0): " & Round(value, 0) & vbCrLf & _
"Excel ROUND(2.5, 0): " & Application.WorksheetFunction.Round(value, 0) & vbCrLf & _
"小数第2位まで: " & Application.WorksheetFunction.Round(12.345, 2)
MsgBox result, vbInformation, "丸め方の違い"
End Sub図で見る2.5の丸め方を比較する
イメージ図VBAとExcelの丸め方の違いに加え、小数第2位まで丸める例を確認します。
2つの数値を用意
value = 2.5と、小数第2位まで丸める12.345を使用
2種類のRoundで計算
VBA RoundとExcel WorksheetFunction.Roundで2.5を整数化。12.345はExcelで2桁に丸める
2・3・12.35を表示
VBAの2.5は2、Excelの2.5は3、Excelの12.345は12.35になる
VBA Roundは中間値を偶数側へ丸めます。表示書式ではなく数値自体を変える処理で、Doubleの誤差にも注意します。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsm形式で保存します。Alt+F11でVBEを開き、[挿入]→[標準モジュール]で作った空のモジュールに、Option Explicitから末尾まで、この例だけを貼り付けます。
- 2
セルの準備は不要です。2.5を整数へ丸める例と、12.345を小数第2位まで丸める例を比較します。
- 3
Example7069のSub内にカーソルを置き、F5キーで実行します。
- 4
VBA Roundは2、Excel ROUNDは3、小数第2位までの結果は12.35と表示されます。