Introduction to IsNumeric | IsNumeric Examples | IsNumeric vs ISNUMBER | Final Thoughts

Introduction to IsNumeric

The IsNumeric VBA function checks if a cell is a number and expresses the answer as a Logical Boolean (True or False). The IsNumeric VBA function is a counterpart to the Excel ISNUMBER function, but the expressions don’t always produce the same results.

This isn’t the first time you’ve seen me use IsNumeric in my VBA macros, but in this tutorial I’ll explain how it’s used and what it’s good for. Let’s get started.

  • If IsNumeric thinks your expression is a number, it will return a value of True.
  • If it’s not a number, it will return False.

The syntax for the IsNumeric function can’t get any simpler:


As you can see, IsNumeric accepts one argument: an expression of the Variant Data Type. I know, I know. The complicated jargon isn’t necessary.

All you need to know is that IsNumeric can pretty much evaluate anything. A cell, a string, a date, a range. It won’t choke up on any of these, but that doesn’t mean it’ll give you the answer you want.

For example, if you enter a range, like Range("A1:B5"), into an IsNumeric expression, it will always return False even if all the values in the range ARE numeric. The IsNumeric function won’t loop through each cell in your range and check whether each of them are numeric. You’ll have to do that with a loop of your own, like a For Each loop. I’ll show you a macro that does that in the IsNumeric Examples section.

Because IsNumeric returns True or False, it’s a great expression to include inside If Statements. Let’s take a look at a couple examples.

IsNumeric Examples

Check if a Cell is a Number

Sub IsNumericDemo()
'Use VBA to test if a cell is numeric via a subroutine
If IsNumeric(Range("A1")) = True Then
    Range("B1") = "A1 is a number"
    Range("B1") = "A1 is not number"
End If
End Sub

This example macro tests if the value in cell A1 is a number. If it is, the value in cell B1 says it’s a number. Otherwise, it says it’s not a number.

You don’t need to put the = True in the above If Statement, but I included it to make the macro easier to read.

If you have a macro that performs arithmetic expressions, it’s a good practice to use IsNumeric to make sure your input is numeric before performing the math. As a side note, it’s also a good to make sure your input isn’t empty by using the IsEmpty function. That’s another tutorial for another day.

Check if All Cells in a Range are Numeric

Sub IsNumericRange()
Dim cell As Range
Dim bIsNumeric As Boolean

bIsNumeric = True
For Each cell In Range("A1:B5")
    If IsNumeric(cell) = False Then
        'Non-numeric value found. Exit loop
        bIsNumeric = False
        Exit For
    End If
Next cell

If bIsNumeric = True Then
    'All values in your range are numeric
    MsgBox "All values are numeric"
    'There are non-numeric values in your range
    MsgBox "There are non-numeric values in your range"
End If
End Sub

The above macro checks each cell in your range and the moment it finds one that isn’t numeric, it exits the For Each loop and lets you know there are non-numeric cells in the range.

As a programmer, you can perform different actions based on whether the entire range is numeric or not. Checks like this one give you more control over how you handle errors.

IsNumeric vs ISNUMBER

To test how the IsNumeric VBA and the ISNUMBER Excel functions behave, we’re going to make a User Defined Function (UDF) to evaluate the following cells in Column A:

IsNumeric Test Data

We’ll use the native ISNUMBER function of Excel in Column C and we’ll use the the following UDF to represent our VBA IsNumeric function in Column B.

Function IsNumericTest(TestCell As Variant)
'Use VBA to test if a cell is numeric via a function
If IsNumeric(TestCell) Then 'if TestCell is True
    IsNumericTest = True 'Cell is a number
    IsNumericTest = False 'Cell is not a number
End If
End Function

We’ll evalulate the expressions in Column A using both the VBA IsNumeric() function (Column B) and the Excel =ISNUMBER() function (Column C). You would expect them to be identical, right? You’re about to be surprised…

IsNumeric vs IsNumber Results

That’s right. The two functions yield completely different answers when evaluating the same data. IT’S CRAZY!

By looking at the comparison image, you can see the VBA IsNumeric function considers empty cells numeric, but the Excel ISNUMBER function does not. That’s why I said earlier that it’s a good VBA practice to check if your cell is empty by using the IsEmpty function when you use the IsNumeric function.

Another difference you can see is in how the two functions treat dates and times. IsNumeric VBA says times are numbers, but dates are not. It also says the combination of dates and times are not numeric. ISNUMBER, on the other hand, says all 3 date/time cells are numeric.

Final Thoughts

Congratulations! You’re now an IsNumeric expert! You certainly know more about IsNumeric than the average Excel user, and for that you should be excited.

IsNumeric is a great VBA function, but, as you’ve seen, you have to be careful when using it if there’s a chance your input may be blank or if you’re evaluating dates and times.

It’s important to know what a function does well, but it’s equally important to know what a function doesn’t do well. I hope you find this VBA tutorial informative and you’re IsNumeric in your own macros!

Please subscribe to my email list for more great VBA tips designed to help you Master VBA. Share this article with people you know, start a conversation by leaving a comment below and follow me on Google+ or Twitter!

Discover how this Nuclear Engineer Mastered Excel VBA

And why you should, too


About Ryan Wells

Ryan Wells
