[VBA][Excel]丸めと四捨五入

※全てのExcelで動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます

サンプル ※説明に必要な部分しか記述していません

このサンプルではRound関数とWorksheetFunction.Roundメソッドを使って複数のパターンを試しています


下記を実行すると

Private Sub CommandButton1_Click()

Dim i As Integer

i = 1

'●丸め
Sheet1.Cells(i, 1).Value = "Round関数"
i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.4, 0)
i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.5, 0)

'小数点第2位以下を丸め
i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.45, 1)
i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.55, 1)

i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.454, 2)
i = i + 1
Sheet1.Cells(i, 1).Value = Round(1.456, 2)



'●四捨五入
i = i + 1
Sheet1.Cells(i, 1).Value = "WorksheetFunction.Round メソッド"
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.4, 0)
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.5, 0)

'小数点第2位以下を四捨五入
'前述のRoundとは結果が異なりました
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.45, 1)
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.55, 1)

i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.454, 2)
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1.456, 2)


'十の位以下を四捨五入
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1234, -2)
i = i + 1
Sheet1.Cells(i, 1).Value = WorksheetFunction.Round(1256, -2)

End Sub

画像の通り「1.45および1.55の小数点第2位以下を丸めた時」、Round関数(結果:1.4 と 1.6)とWorksheetFunction.Round メソッド(結果:1.5 と 1.6) では値が異なります。

一方で、通常の第二位の四捨五入だと

1.45→1.5

1.55→1.6

と思われ、このことから「WorksheetFunction.Round メソッド」の方が四捨五入をすると思われますし、ヘルプにも「

数値を四捨五入して指定された桁数にします。

」と明記されています。

「確実に四捨五入をすると断言する」には複数のサンプルで試験した方が良いと個人的には思います。

vba-excel-round