Earlier this week I saw an interesting rounding question on the famous MrExcel Forum. And there was a twist!

# Excel File

Download the Excel file and follow along.

# Original Question

## Link

Link to the original post on MrExcel’s amazing AND free help forum.

## Description

I created this Excel file to explain:

Original values in cells A2:A5 (I added more below). Solution in column B.

## Solution

Cell B2 formula:

=ROUNDUP(A2,-INT(LOG10(A2)))

A brilliant formula from one of the forum members. It rounds like this:

- $12,036,219.22 to $20,000,000.00
- $437,379.70 to $500,000.00

# The Twist

## Twist Definition

$12,036,219.22 (numbers with 8 digits to the left of decimal) should round to $13,000,000.00 (not $20,000,000.00). This is the only exception.

## Twist Solution 1

With only 1 exception why not use the IF function? Formula in cell D2:

=ROUNDUP(A2,IF(-INT(LOG10(A2))=-7,-6,-INT(LOG10(A2))))

**-INT(LOG10(A2))** determines the rounding level. IF function tests for the exception changing rounding level only for the exception.

## Twist Solution 2

Multiple exceptions? How can I make it easy to modify them?

=ROUNDUP(A2,INDEX(list!$B$1:$B$8,MATCH(-INT(LOG10($A2)),list!$A$1:$A$8,0)))

Formula looks into column A and retrieves desired rounding level in column B. It’s easy to change rounding level in column B.

Note: cell A8 value of -7 is the exception. It rounds to -6 (not -7).

## Twist Solution 3

Can I remove the lookup table? I created this:

=ROUNDUP(A2,INDEX({0;-1;-2;-3;-4;-5;-6;-6},MATCH(-INT(LOG10($A2)),{0;-1;-2;-3;-4;-5;-6;-7},0)))

It uses two array constants instead of a lookup table.

Modify desired rounding levels inside INDEX function as needed: **INDEX({0;-1;-2;-3;-4;-5;-6;-6}**

# Creating an Array Constant

Twist Solution 3 has two array constants. I could type values directly in the formula but the syntax is tricky. I modified Twist Solution 2 formula.

Twist Solution 2: =ROUNDUP(A2,INDEX(list!$B$1:$B$8,MATCH(-INT(LOG10($A2)),list!$A$1:$A$8,0))) --see "5 Steps..." further down to convert formula Twist Solution 2 into formula Twist Solution 3: Twist Solution 3: =ROUNDUP(A2,INDEX({0;-1;-2;-3;-4;-5;-6;-6},MATCH(-INT(LOG10($A2)),{0;-1;-2;-3;-4;-5;-6;-7},0)))

5 Steps to convert sheet list references into array constants:

- in formula bar highlight
**list!$B$1:$B$8** - press F9 key (on laptop: hold Fn key then press F9 key) to hard code values
- still in formula bar highlight
**list!$A$1:$A$8** - press F9 key (on laptop: hold Fn key then press F9 key) to hard code values
- press Enter key (to permanently hard codes values)

The formula should now look like this:

=ROUNDUP(A2,INDEX({0;-1;-2;-3;-4;-5;-6;-6},MATCH(-INT(LOG10($A2)),{0;-1;-2;-3;-4;-5;-6;-7},0)))

Finally, show a co-worker your amazing formula 🙂

# MrExcel Help Forum

Bill Jelen (aka MrExcel) created his forum over 20 years ago. It’s an incredible free source to answer Excel related questions. Bill also writes/publishes books, offers consulting services, and has a popular YouTube channel.

# About Me

I’m a Data Analyst and major Excel fan. I live in Markham Ontario Canada.