ISNumber

G

Guest

I tried to use the ISNumber() function within VBA but it is not usable.

2 Questions:
1. How can I know which functions can be used in VBA and which can not?
2. How do I determine if the value of a cell is a number?

I don't want to enter a formula in a cell and then test the value of that
cell, I just want to do it in the code if possible. Thanks...
 
J

Jim Cone

In Excel 2002 vba help look for: "List of Worksheet Functions Available to Visual Basic"
The name of the help file changes somewhat in each xl version.
You didn't specify what version you are using.
--
Try: IsNumeric
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins / Excel Programming)


"Mike H." <[email protected]>
wrote in message
I tried to use the ISNumber() function within VBA but it is not usable.

2 Questions:
1. How can I know which functions can be used in VBA and which can not?
2. How do I determine if the value of a cell is a number?

I don't want to enter a formula in a cell and then test the value of that
cell, I just want to do it in the code if possible. Thanks...
 
B

Bob Phillips

Worked for me

MsgBox Application.IsNumber(1)

but why bother when you have IsNumeric in VBA?

--
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
B

Bob Phillips

IsNumeric actually works slightly differently, which may be useful

Dim myVar

myVar = "1"
MsgBox Application.IsNumber(myVar)
MsgBox IsNumeric(myVar)



--
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Guest

Isnumeric works just fine, but strangely enough, isnumber() is in the help
list you referred to as being available in VBA. So now I don't know if I can
trust the list or not???

BTW, I am using Excel 2003.
 
G

Guest

I tried this, which didn't work:
If IsNumber(ActiveCell.Value) = True Then
MsgBox ("It is true")
Else
MsgBox ("It is false")
End If

But your method definitely works. Thanks.
 
R

Rick Rothstein \(MVP - VB\)

IsNumeric actually works slightly differently, which may be useful
Dim myVar

myVar = "1"
MsgBox Application.IsNumber(myVar)
MsgBox IsNumeric(myVar)

The bulk of my VB experience is with the compiled version, so the usage
expectations may be different between that group and the Excel VBA user
community; but, over in the compiled group, IsNumeric is usually used to
"proof" a TextBox entry from a user to make sure an entered number is either
digits only or digits coupled with a single decimal point. Other valid
number formations usually screw up the remainder of the code manipulations.
For example, if a user is looking for a 3-digit number, and entry of 1e9
does him/her no good. Because of the way compiled VB users expect IsNumeric
to work, and because it doesn't work that way, I repeatedly post the
following message in reply to suggestions to use IsNumeric. I offer it here
to the Excel community **in case** is should apply to a user's particular
situation.

Rick

From a previous post of mine (to the **compiled** VB newsgroups in case that
should matter)...

I usually try and steer people away from using IsNumeric to "proof"
supposedly numeric text. Consider this (also see note below):

ReturnValue = IsNumeric("($1,23,,3.4,,,5,,E67$)")

Most people would not expect THAT to return True. IsNumeric has some "flaws"
in what it considers a proper number and what most programmers are looking
for.

I had a short tip published by Pinnacle Publishing in their Visual Basic
Developer magazine that covered some of these flaws. Originally, the tip was
free to view but is now viewable only by subscribers.. Basically, it said
that IsNumeric returned True for things like -- currency symbols being
located in front or in back of the number as shown in my example (also
applies to plus, minus and blanks too); numbers surrounded by parentheses as
shown in my example (some people use these to mark negative numbers);
numbers containing any number of commas before a decimal point as shown in
my example; numbers in scientific notation (a number followed by an upper or
lower case "D" or "E", followed by a number equal to or less than 305 -- the
maximum power of 10 in VB); and Octal/Hexadecimal numbers (&H for
Hexadecimal, &O or just & in front of the number for Octal).

NOTE:
======
In the above example and in the referenced tip, I refer to $ signs and
commas and dots -- these were meant to refer to your currency, thousands
separator and decimal point symbols as defined in your local settings --
substitute your local regional symbols for these if appropriate.

As for your question about checking numbers, here are two functions that I
have posted in the past for similar questions..... one is for digits only
and the other is for "regular" numbers:

Function IsDigitsOnly(Value As String) As Boolean
IsDigitsOnly = Len(Value) > 0 And _
Not Value Like "*[!0-9]*"
End Function

Function IsNumber(ByVal Value As String) As Boolean
' Leave the next statement out if you don't
' want to provide for plus/minus signs
If Value Like "[+-]*" Then Value = Mid$(Value, 2)
IsNumber = Not Value Like "*[!0-9.]*" And _
Not Value Like "*.*.*" And _
Len(Value) > 0 And Value <> "." And _
Value <> vbNullString
End Function

Here are revisions to the above functions that deal with the local settings
for decimal points (and thousand's separators) that are different than used
in the US (this code works in the US too, of course).

Function IsNumber(ByVal Value As String) As Boolean
Dim DP As String
' Get local setting for decimal point
DP = Format$(0, ".")
' Leave the next statement out if you don't
' want to provide for plus/minus signs
If Value Like "[+-]*" Then Value = Mid$(Value, 2)
IsNumber = Not Value Like "*[!0-9" & DP & "]*" And _
Not Value Like "*" & DP & "*" & DP & "*" And _
Len(Value) > 0 And Value <> DP And _
Value <> vbNullString
End Function

I'm not as concerned by the rejection of entries that include one or more
thousand's separators, but we can handle this if we don't insist on the
thousand's separator being located in the correct positions (in other words,
we'll allow the user to include them for their own purposes... we'll just
tolerate their presence).

Function IsNumber(ByVal Value As String) As Boolean
Dim DP As String
Dim TS As String
' Get local setting for decimal point
DP = Format$(0, ".")
' Get local setting for thousand's separator
' and eliminate them. Remove the next two lines
' if you don't want your users being able to
' type in the thousands separator at all.
TS = Mid$(Format$(1000, "#,###"), 2, 1)
Value = Replace$(Value, TS, "")
' Leave the next statement out if you don't
' want to provide for plus/minus signs
If Value Like "[+-]*" Then Value = Mid$(Value, 2)
IsNumber = Not Value Like "*[!0-9" & DP & "]*" And _
Not Value Like "*" & DP & "*" & DP & "*" And _
Len(Value) > 0 And Value <> DP And _
Value <> vbNullString
End Function

Rick
 
G

Guest

Thanks Rick for all the info. I actually will use one of the version of the
isnumber function that you posted. Thanks a lot.

When you talked about the compiled version of Visual Basic, is it possible
to extract my code from a spreadsheet and compile that somehow and then use
that code instead of working with the code within the spreadsheet?
 
R

Rick Rothstein \(MVP - VB\)

Thanks Rick for all the info. I actually will use one of the version of
the
isnumber function that you posted. Thanks a lot.

You are welcome and I am glad you found something useful in there.
When you talked about the compiled version of Visual Basic, is it possible
to extract my code from a spreadsheet and compile that somehow and then
use
that code instead of working with the code within the spreadsheet?

You can't compile from within Excel. The compiled version I was referring to
is Microsoft's Visual Basic 6 (the version I use) or earlier. These have
been somewhat abandoned by Microsoft in favor of their VB.NET (now called
VB200x) where the x is either 2, 3 or 5; although VB6 still works, even in
Vista. If you have one of these compiled versions of VB, you can open an
Excel session and create or modify a spreadsheet's content via property and
method manipulations, but the experience is not the same as working in Excel
directly.

Rick
 
B

Bob Phillips

Yes, buy VB, and create a dll.

--
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Guest

You told me this over two months ago. It took that long for IT. They just
installed
Microsoft Visual Studio 2005 Professional. Can you give me some pointers on
where to begin. I have a vba project that I'd like to make into a .dll.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

isnumber 3
test for number 4
Avoiding IF limits with VBA 9
ISNUMBER 7
Still can't validate entry 7
Formula from closed workbook? 2
Excel VBA 1
Using WorksheetFunction.Max() 4

Top