In VBA (Visual Basic for Applications), the Round function is used to round a number to a specified number of decimal places. The syntax for the Round function is as follows:
Round(expression, [numdecimalplaces])
expression: The numeric expression to be rounded.
[numdecimalplaces]: Optional. Specifies the number of decimal places to which expression is rounded. If omitted, the default is 0.
Here is an example of how to use the Round function in VBA:
Sub ExampleRound()
Dim myNumber As Double
Dim roundedNumber As Double
' Assign a value to myNumber
myNumber = 3.14159
' Round the number to two decimal places
roundedNumber = Round(myNumber, 2)
' Print the result in the Immediate Window (press Ctrl+G to view the Immediate Window)
Debug.Print roundedNumber
End Sub
Run the ExampleRound subroutine and you’ll see 3.14 printed in the Immediate Window. This is because myNumber is rounded to two decimal places.
Do keep in mind that the Round function in VBA uses “Banker’s Rounding” or round to even, which is different from the standard rounding method you might expect. With Banker’s Rounding, when the number being rounded is exactly halfway between two values, the function rounds towards the nearest even number. For example:
Debug.Print Round(2.5, 0) ' Outputs 2, not 3
Debug.Print Round(3.5, 0) ' Outputs 4, not 3
If you want standard rounding (away from zero) in VBA, you’ll often need to write your own function or use an alternative approach like this:
Sub StandardRound()
Dim numberToRound As Double
Dim numDecimalPlaces As Integer
Dim multiplier As Double
Dim roundedNumber As Double
numberToRound = 2.5
numDecimalPlaces = 0
multiplier = 10 ^ numDecimalPlaces
' Standard rounding: Away from zero
roundedNumber = Int(numberToRound * multiplier + 0.5 * Sgn(numberToRound)) / multiplier
Debug.Print roundedNumber ' Outputs 3
End Sub
This will round away from zero in all cases, providing the common rounding behavior most people expect.