I found a ROUNDUP equivalent from this link: http://allenbrowne.com/round.html#RoundUp

To round upwards towards the next highest number, take advantage of the way Int() rounds negative numbers downwards, like this: - Int( - [MyField])

As shown above, Int(-2.1) rounds down to -3. Therefore this expression rounds 2.1 up to 3.

To round up to the higher cent, multiply by -100, round, and divide by -100: Int(-100 * [MyField]) / -100

The syntax is counter-intuitive, but it works exactly as I intended.

Answer from alextansc on Stack Overflow
🌐
Allenbrowne
allenbrowne.com › round.html
Microsoft Access tips: Rounding numbers in Access
The Round() function in Access ... whereas 0.135 rounds to 0.14 (4 is even.) The core idea here is fairness: 1,2,3, and 4 get rounded down. 6,7,8, and 9 get rounded up....
🌐
TechOnTheNet
techonthenet.com › access › functions › numeric › round.php
MS Access: Round Function
Round (12.55, 1) Result: 12.6 (rounds up) Round (12.65, 1) Result: 12.6 (rounds down) Round (12.75, 1) Result: 12.8 (rounds up) In these cases, the last digit after rounding is always an even number. So, be sure to only use the Round function if this is your desired result. The syntax for the Round function in MS Access is:
Discussions

roundUp Function | Access World Forums
Hell All I am looking for a function to roundup currency. Exel has this function but Access does not. Rounds a number up, away from 0 (zero). Syntax ROUNDUP(number,num_digits) Number is any real number that you want rounded up. Num_digits is the number of digits to which you want to... More on access-programmers.co.uk
🌐 access-programmers.co.uk
March 8, 2017
sql - How to ROUNDUP a number in Access 2013? - Stack Overflow
For Access 2013, I need a way to round up any fractional numbers to the next whole number in an SQL query. Example: SELECT ROUNDUP(NumberValues) FROM Table1 In the above query, a row with 1.25 s... More on stackoverflow.com
🌐 stackoverflow.com
ms access - How can I always round up decimal values to the nearest integer value? - Stack Overflow
On a report I have the following code for a field: =Sum([PartQty]*[ModuleQty]) Example results are 2.1 and 2.6. What I need is for these value to round up to the value of 3. How can I change my ... More on stackoverflow.com
🌐 stackoverflow.com
excel - Rounding in MS Access - Stack Overflow
Releases Keep up-to-date on features we add to Stack Overflow and Stack Internal. ... Find centralized, trusted content and collaborate around the technologies you use most. Learn more about Collectives ... Bring the best of human thought and AI automation together at your work. Explore Stack Internal ... But I am looking for a means that does not rely on Excel. ... Depends on the version of Access. From Access 2000 on, a Round... More on stackoverflow.com
🌐 stackoverflow.com
🌐
W3Schools
w3schools.com › sql › func_msaccess_round.asp
MS Access Round() Function
String Functions: ASCII CHAR_LENGTH CHARACTER_LENGTH CONCAT CONCAT_WS FIELD FIND_IN_SET FORMAT INSERT INSTR LCASE LEFT LENGTH LOCATE LOWER LPAD LTRIM MID POSITION REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPACE STRCMP SUBSTR SUBSTRING SUBSTRING_INDEX TRIM UCASE UPPER Numeric Functions: ABS ACOS ASIN ATAN ATAN2 AVG CEIL CEILING COS COT COUNT DEGREES DIV EXP FLOOR GREATEST LEAST LN LOG LOG10 LOG2 MAX MIN MOD PI POW POWER RADIANS RAND ROUND SIGN SIN SQRT SUM TAN TRUNCATE Date Functions: ADDDATE ADDTIME CURDATE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURTIME DATE DATEDIFF DATE_ADD DATE_FORMAT DA
🌐
Microsoft Support
support.microsoft.com › en-us › office › round-function-921ce538-c9a6-41e2-be87-28e685b59935
Round Function - Microsoft Support
Syntax for the function that returns a number rounded to a specified number of decimal places in Access.
🌐
Access World
access-programmers.co.uk › home › forums › microsoft access discussion › modules & vba
roundUp Function | Access World Forums
March 8, 2017 - Num_digits is the number of digits to which you want to round number. Remarks • ROUNDUP behaves like ROUND, except that it always rounds a number up. • If num_digits is greater than 0 (zero), then number is rounded up to the specified number of decimal places.
🌐
YouTube
youtube.com › watch
Microsoft Access Round a Number to the Nearest 10, 100, etc. (Rounding) - YouTube
In this Microsoft Access tutorial, I'm going to show you how to round any number to the nearest 10, 100, etc. You'll also see how to round up, down, and avoi...
Published   April 16, 2020
Find elsewhere
🌐
YouTube
youtube.com › watch
Rounding Numbers in Microsoft Access. Understanding Int, Fix, Round, and Banker's Rounding - YouTube
In this video, I'm going to teach you all about rounding in Microsoft Access. We'll look at the Round, Int, and Fix functions and how they're different. We'l...
Published   May 19, 2022
🌐
Computer Learning Zone
599cd.com › tips › access › round-int-fix
Round Int Fix - Microsoft Access
New Tips Added Weekly! Click here to get on our Mailing List · Access Excel Word Windows FrontPage Hardware Misc VB VBScript VB.NET ASP HTA
🌐
Microsoft Learn
learn.microsoft.com › en-us › troubleshoot › microsoft-365-apps › access › decimal-value-rounded-up-down-integer
Decimal value is rounded up/down to integer value - Microsoft 365 Apps | Microsoft Learn
June 25, 2025 - When the first value that you enter in the first row of the column is an integer value, Access automatically sets the data type of the column to Number. Additionally, the Field Size property of the column is set to Long Integer. Therefore, the decimal value that you enter in the column is rounded up or down to the integer value.
🌐
VBA Express
vbaexpress.com › kb › archive.php › k-424.html
VBA Express : Access - Round up a value using the Integer or Round function.
Round up a value using the Integer or Round function. This code converts a decimal value to an Integer value by rounding it up, never down.
🌐
Computer Learning Zone
599cd.com › blog › display-article.asp
Rounding Numbers in Microsoft Access - Computer Learning Zone
In this video, we will talk about different ways to round numbers in Microsoft Access. I will show you how to use the Int, Fix, and Round functions, explain how bankers rounding works, and demonstrate how to round numbers up or down, chop off cents, and round to specific intervals like tens or hundreds.
Top answer
1 of 13
26

Be careful, the VBA Round function uses Banker's rounding, where it rounds .5 to an even number, like so:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

Whereas the Excel Worksheet Function Round, always rounds .5 up.

I've done some tests and it looks like .5 up rounding (symmetric rounding) is also used by cell formatting, and also for Column Width rounding (when using the General Number format). The 'Precision as displayed' flag doesn't appear to do any rounding itself, it just uses the rounded result of the cell format.

I tried to implement the SymArith function from Microsoft in VBA for my rounding, but found that Fix has an error when you try to give it a number like 58.55; the function giving a result of 58.5 instead of 58.6. I then finally discovered that you can use the Excel Worksheet Round function, like so:

Application.Round(58.55, 1)

This will allow you to do normal rounding in VBA, though it may not be as quick as some custom function. I realize that this has come full circle from the question, but wanted to include it for completeness.

2 of 13
11

To expand a little on the accepted answer:

"The Round function performs round to even, which is different from round to larger."
--Microsoft

Format always rounds up.

  Debug.Print Round(19.955, 2)
  'Answer: 19.95

  Debug.Print Format(19.955, "#.00")
  'Answer: 19.96

ACC2000: Rounding Errors When You Use Floating-Point Numbers: http://support.microsoft.com/kb/210423

ACC2000: How to Round a Number Up or Down by a Desired Increment: http://support.microsoft.com/kb/209996

Round Function: http://msdn2.microsoft.com/en-us/library/se6f2zfx.aspx

How To Implement Custom Rounding Procedures: http://support.microsoft.com/kb/196652

🌐
Excelfox
excelfox.com › forum › showthread.php › 318-ROUNDUP-AND-ROUNDDOWN-In-MS-Access-With-Zero-Significance
ROUNDUP AND ROUNDDOWN In MS-Access With Zero Significance
September 22, 2023 - Seems we can have workarounds for this one too. To roundup a calculated value or a field value to zero significance (in other words, the equivalent of ROUNDUP(num,0)) , just do the following SELECT CINT(+0.5) FROM Similarly, to rounddown with zero significance,
🌐
PC Review
pcreview.co.uk › newsgroups › microsoft access › microsoft access
I want to use the ROUNDUP function from Excel in Access | PC Review
August 14, 2006 - Syntax ROUNDUP(number,num_digits) Number is any real number that you want rounded up. Num_digits is the number of digits to which you want to round number. Remarks · ROUNDUP behaves like ROUND, except that it always rounds a number up.
Top answer
1 of 2
4

You can use the RoundUp and RoundDown functions found here at Experts Exchange and here at GitHub.

Your usage would be:

Value = 27.605 
Value1 = RoundUp(Value, 2)    ' 27.61 
Value2 = RoundDown(Value, 2)  ' 27.6

These are the functions:

' Rounds Value up with count of decimals as specified with parameter NumDigitsAfterDecimals.
'
' Rounds to integer if NumDigitsAfterDecimals is zero.
'
' Optionally, rounds negative values away from zero.
'
' Uses CDec() for correcting bit errors of reals.
'
' Execution time is about 0.5µs for rounding to integer
' else about 1µs.
'
Public Function RoundUp( _
    ByVal Value As Variant, _
    Optional ByVal NumDigitsAfterDecimals As Long, _
    Optional ByVal RoundingAwayFromZero As Boolean) _
    As Variant

    Dim Scaling     As Variant
    Dim ScaledValue As Variant
    Dim ReturnValue As Variant

    ' Only round if Value is numeric and ReturnValue can be different from zero.
    If Not IsNumeric(Value) Then
        ' Nothing to do.
        ReturnValue = Null
    ElseIf Value = 0 Then
        ' Nothing to round.
        ' Return Value as is.
        ReturnValue = Value
    Else
        If NumDigitsAfterDecimals <> 0 Then
            Scaling = CDec(Base10 ^ NumDigitsAfterDecimals)
        Else
            Scaling = 1
        End If
        If Scaling = 0 Then
            ' A very large value for Digits has minimized scaling.
            ' Return Value as is.
            ReturnValue = Value
        ElseIf RoundingAwayFromZero = False Or Value > 0 Then
            ' Round numeric value up.
            If Scaling = 1 Then
                ' Integer rounding.
                ReturnValue = -Int(-Value)
            Else
                ' First try with conversion to Decimal to avoid bit errors for some reals like 32.675.
                On Error Resume Next
                ScaledValue = -Int(CDec(-Value) * Scaling)
                ReturnValue = ScaledValue / Scaling
                If Err.Number <> 0 Then
                    ' Decimal overflow.
                    ' Round Value without conversion to Decimal.
                    ScaledValue = -Int(-Value * Scaling)
                    ReturnValue = ScaledValue / Scaling
                End If
            End If
        Else
            ' Round absolute value up.
            If Scaling = 1 Then
                ' Integer rounding.
                ReturnValue = Int(Value)
            Else
                ' First try with conversion to Decimal to avoid bit errors for some reals like 32.675.
                On Error Resume Next
                ScaledValue = Int(CDec(Value) * Scaling)
                ReturnValue = ScaledValue / Scaling
                If Err.Number <> 0 Then
                    ' Decimal overflow.
                    ' Round Value without conversion to Decimal.
                    ScaledValue = Int(Value * Scaling)
                    ReturnValue = ScaledValue / Scaling
                End If
            End If
        End If
        If Err.Number <> 0 Then
            ' Rounding failed because values are near one of the boundaries of type Double.
            ' Return value as is.
            ReturnValue = Value
        End If
    End If

    RoundUp = ReturnValue

End Function

And:

' Rounds Value down with count of decimals as specified with parameter NumDigitsAfterDecimals.
'
' Rounds to integer if NumDigitsAfterDecimals is zero.
'
' Optionally, rounds negative values towards zero.
'
' Uses CDec() for correcting bit errors of reals.
'
' Execution time is about 0.5µs for rounding to integer
' else about 1µs.
'
Public Function RoundDown( _
    ByVal Value As Variant, _
    Optional ByVal NumDigitsAfterDecimals As Long, _
    Optional ByVal RoundingToZero As Boolean) _
    As Variant

    Dim Scaling     As Variant
    Dim ScaledValue As Variant
    Dim ReturnValue As Variant

    ' Only round if Value is numeric and ReturnValue can be different from zero.
    If Not IsNumeric(Value) Then
        ' Nothing to do.
        ReturnValue = Null
    ElseIf Value = 0 Then
        ' Nothing to round.
        ' Return Value as is.
        ReturnValue = Value
    Else
        If NumDigitsAfterDecimals <> 0 Then
            Scaling = CDec(Base10 ^ NumDigitsAfterDecimals)
        Else
            Scaling = 1
        End If
        If Scaling = 0 Then
            ' A very large value for Digits has minimized scaling.
            ' Return Value as is.
            ReturnValue = Value
        ElseIf RoundingToZero = False Then
            ' Round numeric value down.
            If Scaling = 1 Then
                ' Integer rounding.
                ReturnValue = Int(Value)
            Else
                ' First try with conversion to Decimal to avoid bit errors for some reals like 32.675.
                ' Very large values for NumDigitsAfterDecimals can cause an out-of-range error when dividing.
                On Error Resume Next
                ScaledValue = Int(CDec(Value) * Scaling)
                ReturnValue = ScaledValue / Scaling
                If Err.Number <> 0 Then
                    ' Decimal overflow.
                    ' Round Value without conversion to Decimal.
                    ScaledValue = Int(Value * Scaling)
                    ReturnValue = ScaledValue / Scaling
                End If
            End If
        Else
            ' Round absolute value down.
            If Scaling = 1 Then
                ' Integer rounding.
                ReturnValue = Fix(Value)
            Else
                ' First try with conversion to Decimal to avoid bit errors for some reals like 32.675.
                ' Very large values for NumDigitsAfterDecimals can cause an out-of-range error when dividing.
                On Error Resume Next
                ScaledValue = Fix(CDec(Value) * Scaling)
                ReturnValue = ScaledValue / Scaling
                If Err.Number <> 0 Then
                    ' Decimal overflow.
                    ' Round Value with no conversion.
                    ScaledValue = Fix(Value * Scaling)
                    ReturnValue = ScaledValue / Scaling
                End If
            End If
        End If
        If Err.Number <> 0 Then
            ' Rounding failed because values are near one of the boundaries of type Double.
            ' Return value as is.
            ReturnValue = Value
        End If
    End If

    RoundDown = ReturnValue

End Function

Note please, that the native Round of VBA is quite buggy. See the test module of the download.

2 of 2
3

You won't get a better answer than Gustav's for proper rounding functions, and in the case of only two constituent values, then the complimentary RoundDown and RoundUp functions are sufficient. (FYI, similar functions are often named Floor and Ceiling in other languages and programming libraries.)

However, when it is critical to have constituent values sum to an original/expected value, it is best to calculate the last of the constituent values by a difference of the expected total and the sum of all other rounded values. This will guarantee the correct sum even if there are unexpected results from rounding. Even if using the buggy VBA Round() function, this technique would have avoided the 1 cent errors to start with.

surcharge1 = SomeRoundFunction(Total_Surcharge / 2.0)
surcharge2 = Total_Surcharge - surcharge1

This is especially important with more than two constituent values, since there is no set of rounding functions that will properly round 3 or more values to guarantee they add up to some value. As an example, I recently had to split out total transaction amounts by (re)calculating discounts and taxes. Although I knew the percentages for both, I needed to figure each part rounded to the penny. Penny errors were acceptable in both discount and tax, but they still needed to add up to the total after any rounding. The only guarantee to ensure that the final transaction value remained unchanged was to first calculate and round the tax, next calculate and round the discount, then finally correct for penny errors by subtracting the sum of parts from the expected total.

🌐
Experts Exchange
experts-exchange.com › questions › 20531182 › Round-UP-to-next-integer-in-MS-Access-2000-in-a-query.html
Solved: Round UP to next integer in MS Access 2000 in a query? | Experts Exchange
February 26, 2003 - Okay sorry for all the bad answers. Here's your answer tested and working: SELECT CLng( number + .5) as Expr; This statement works in Access 2000 and will round up any number to the next whole number.
🌐
TechRepublic
techrepublic.com › home › topics › software › web development › rounding down in access take 2
Rounding Down In Access Take 2 - TechRepublic
September 10, 2003 - This statement works in Access 2000 and will round up any number to the next whole number.
🌐
Post.Byes
post.bytes.com › home › forum › topic › access
Ms Access Round Up - Post.Byes
The normal function that VBA/Access provides is called Round(), however it will not do what you are asking, since it rounds to the nearest decimal place, not the next highest decimal place. This being the case, you'll have to write a Select Case function to do what you are asking.