TommyGun
MrExcel MVP
- Joined
- Dec 9, 2002
- Messages
- 4,202
-
#2
<font face=Courier New><SPAN style=»color:#00007F»>Sub</SPAN> Test()
<SPAN style=»color:#00007F»>Dim</SPAN> i <SPAN style=»color:#00007F»>As</SPAN> <SPAN style=»color:#00007F»>Integer</SPAN>, j <SPAN style=»color:#00007F»>As</SPAN> <SPAN style=»color:#00007F»>Long</SPAN>
i = 250
j = 2500000
<SPAN style=»color:#00007F»>If</SPAN> TypeName(i) = «Integer» <SPAN style=»color:#00007F»>Then</SPAN>
MsgBox «Variable «»i»» is an integer.»
<SPAN style=»color:#00007F»>Else</SPAN>
MsgBox «Variable «»i»» is a: » & TypeName(i)
<SPAN style=»color:#00007F»>End</SPAN> <SPAN style=»color:#00007F»>If</SPAN>
<SPAN style=»color:#00007F»>If</SPAN> TypeName(j) = «Integer» <SPAN style=»color:#00007F»>Then</SPAN>
MsgBox «Variable «»j»» is an integer.»
<SPAN style=»color:#00007F»>Else</SPAN>
MsgBox «Variable «»j»» is a: » & TypeName(j)
<SPAN style=»color:#00007F»>End</SPAN> <SPAN style=»color:#00007F»>If</SPAN>
<SPAN style=»color:#00007F»>End</SPAN> <SPAN style=»color:#00007F»>Sub</SPAN></FONT>
tzenekkik
New Member
- Joined
- Jun 3, 2002
- Messages
- 39
-
#3
or try this: =TRUNC(A1;0)=A1
(provided A1 holds the value to be tested)
Scott Huish
MrExcel MVP
- Joined
- Mar 17, 2004
- Messages
- 19,961
- Office Version
-
- 365
- Platform
-
- Windows
-
#4
Sub test()
x = Range(«A1»).Value
If Int(x) / x = 1 Then
MsgBox «Value is an Integer»
Else
MsgBox «Value is not an Integer»
End If
End Sub
RalphA
Well-known Member
- Joined
- May 14, 2003
- Messages
- 3,829
-
#5
One more:
Assuming A1 has the number, put, in any other cell, the formula:
=IF(INT(A1)=A1,»True»,»False»)
tzenekkik
New Member
- Joined
- Jun 3, 2002
- Messages
- 39
-
#6
so: INT(A1)=A1 is the shortest version to test for an integer.
verblender
New Member
- Joined
- May 15, 2017
- Messages
- 1
-
#7
since you are using VBA, not checking within the formulas of a given worksheet, you can check if a cell is of integer variable type using this syntax:
If
VarType(my_variable) = vbInteger Then ‘IF my_variable if is of type Integer …
other types of comparisons for different kinds of data (date, text, etc) can be made using the following code:
If VarType(my_variable) = vbInteger Then ‘IF my_variable is of type Integer …
‘Identical to :
If VarType(my_variable) = 2 Then ‘IF my_variable is of type Integer …
based on the following table:
vbEmpty 0
vbNull 1
vbInteger 2
vbLong 3
vbSingle 4
vbDouble 5
vbCurrency 6
vbDate 7
vbString 8
vbObject 9
vbError 10
i read this on from https://www.excel-pratique.com/en/vba/conditions_continued.php which basically covers this for VBA.
SpillerBD
Well-known Member
- Joined
- Jul 2, 2014
- Messages
- 2,851
- Office Version
-
- 365
- Platform
-
- Windows
-
#8
=If (Trunc(A1)=A1,Integer,Non-Integer)
or
=If (Int(A1)=A1,Integer,Non-Integer)
I wouldn’t be surprised if the «math» and the floating point issues have some of these fail.
In VBA, you have INT function.
The other functions are available through WorksheetFunction
cubitmg
New Member
- Joined
- Feb 18, 2023
- Messages
- 1
- Office Version
-
- 2016
- Platform
-
- Windows
-
#9
If you can use a macro then I find this function works:
Public Function isInteger(varValue)
On Error GoTo Exit_isInteger ‘if not numeric then int() will throw an error and take the default False return value
isInteger = False ‘default False return value
If Int(varValue) = Val(varValue) Then isInteger = True
Exit_isInteger:
End Function
Return to VBA Code Examples
This tutorial will teach you how to use the IsNumeric and IsNumber functions in VBA to check if values are numbers.
IsNumeric is a built-in VBA function, while IsNumber is an Excel function which can be called from VBA code.
Difference between IsNumber and IsNumeric in VBA
IsNumber checks if a value is stored as a number. Whereas, IsNumeric checks if a value can be converted into a number.
For example, if you pass a blank cell as a parameter, IsNumber will return FALSE, while IsNumeric will return TRUE. Also, if you pass a cell containing number stored as a text, IsNumber will return FALSE and IsNumeric TRUE.
You need to pay attention to these limitations of both functions and decide in which cases is better to use IsNumeric and when IsNumber.
Using IsNumeric in VBA
IsNumeric is the VBA function which checks if a value is numeric and returns a Boolean TRUE or FALSE as a result.
The function can take a variable or a cell value.
Here is an example of taking a cell value:
If IsNumeric(Sheet1.Range("A1").Value) = True Then
MsgBox "The value in A1 is numeric"
Else
MsgBox "The value in A1 is not numeric"
End If
In this example, we check if the value from the cell A1 is numeric using the IsNumeric. This function returns the appropriate message, depending on the result of the function.
This next example perform the same operation, except with a variable instead of a cell value:
Dim n as Variant
n = Sheet1.Range("A1").Value
If IsNumeric(n) = True Then
MsgBox "The value in A1 is numeric"
Else
MsgBox "The value in A1 is not numeric"
End If
Using IsNumber in VBA
IsNumber is an Excel Function, which can be used in VBA. It has an almost similar output as IsNumeric. Let’s look at the example of the IsNumber function:
If Application.WorksheetFunction.IsNumber(Sheet1.Range("A1").Value) = True Then
MsgBox "The value in A1 is numeric"
Else
MsgBox "The value in A1 is not numeric"
End If
As you can see from the code, the difference is in the syntax when calling the function. Since IsNumber is the Excel function, we need to put Application.WorksheetFunction before the function call.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
In VBA, to test whether an expression is a number, the IsNumeric
function can be used.
Description
The IsNumeric function evaluates whether the input expression is a number and returns a Boolean value (TRUE or FALSE). It returns True if the entire expression is a number; otherwise, it returns False.
Syntax
IsNumeric(expression)
The input expression is either a numeric expression or a string expression.
VBA examples of IsNumeric
Example 1 – Using IsNumeric with IF-THEN-ELSE
The following VBA function CheckNumeic uses IsNumeric to test whether input1 is numeric or not with an IF-THEN-ELSE statement.
Function CheckNumeric(ByVal input1) As String If IsNumeric(input1) = True Then MyFunction1 = "Input is numeric" Else MyFunction1 = "Input is not numeric" End If End Function
I would want to draw your attention to line 2. While this line is correct, it is not necessary. Instead, it can be written as:
If IsNumeric(input1) Then
In VBA, whenever you perform a logical test, for the condition of TRUE, you don’t have to type the =TRUE
in the statement.
Example2 – Negate the result of IsNumeric
The VBA function below returns the opposite of IsNumeric
. The function uses the same IF-THEN-ELSE structure.
Function IsNumericReverse(ByVal input1) As Boolean If IsNumeric(input1) = True Then IsNumericReverse = False Else IsNumericReverse = True End If End Function
However, this entire structure is not necessary. Instead, the function can be simplified as follows. The Not logical operator can be used to reverse (negate) the answer of IsNumeric, which serves the objective of the function in this case.
Function IsNumericReverse(ByVal input1) As Boolean IsNumericReverse = Not (IsNumeric(input1)) End Function
Example 3 – VBA action if not numeric
The VBA function counts the number of non-numeric cells in the input range. In line 5, note the use of Not
with IsNumeric
. In the sentence structure here, putting a space after No
t is enough, which is equivalent to using a bracket after Not
to wrap the condition being tested.
Function countNonNumeric(range1 As Range) As Long Dim cell As Range Dim counter As Long For Each cell In range1.Cells If Not IsNumeric(cell.Value) Then 'use Not to test for non-numeric counter = counter + 1 End If Next countNonNumeric = counter End Function
Special Case with Blank
When using IsNumeric, you need to be aware that “blank” (string of zero length) does not mean zero (0) and it is considered to be non-numeric:
IsNumeric("")
returns False
Therefore, when you write your macro, if you want to treat blank as numeric, you may have to use conditional statements to handle the case of blank string inputs.
Special Case with Dates
Another special case with IsNumeric
is the treatment of date inputs. Most people conceptually think dates are numeric (after all, they can be converted into date-serials in the computer). However the IsNumeric
function in VBA considers dates as non-Numeric:
IsNumeric("10/2/2020")
returns False
Even if you try to input a date truly in Date format, IsNumeric still returns False:
IsNumeric(DateSerial(2020, 10, 2))
returns False
Therefore, you may also need to use conditional statements to handle the case of dates expressions.
Special Case with Time
Handling of time expressions by the ISNUMERIC is difficult to manage, or I would describe it as unpredictable. Therefore, when you input expressions contain time expressions, you must test your macro thoroughly.
There are three possibilities with time expressions. Let’s experiment with the macro below. In cell A1, we place a time of “3:00:00 AM” first. Then we run the macro which test 3 cases:
- time in form of string (variable x1)
- time in form of time value (variable x2)
- time placed in a cell in an Excel sheet (variable x3)
Sub TimeCases() Dim y x1 = IsNumeric("3:00:00 AM") x2 = IsNumeric(TimeSerial(3, 0, 0)) y = Range("A1").Value x3 = IsNumeric(y) MsgBox x1 &amp;amp;amp;amp; Chr(10) &amp;amp;amp;amp; x2 &amp;amp;amp;amp; Chr(10) &amp;amp;amp;amp; x3 End Sub
Run the macro and the answers will be displayed in the Msgbox:
Calling Excel Worksheet Function ISNUMBER() in VBA
As an alternative to IsNumeric
in VBA, you may call the Excel worksheet function ISNUMBER()
in your macro. There are two ways to do this. See line 2 and line 3 in the VBA function below, which do the same job. (I personally prefer Method 2.)
Function CallIsNumber(input1) As Boolean x = WorksheetFunction.IsNumber(input1) 'Method 1' x = Application.IsNumber(input1) 'Method 2' CallIsNumber = x End Function
VBA ISNUMERIC vs ISNUMBER Worksheet Function
Although you can either use IsNumeric
or Excel worksheet function ISNUMBER
to check whether an input expression is numeric, you have to be aware of the differences between the two methods in order to program your macros correctly to produce expected result.
Expression | Date type of expression | ISNUMERIC returns (VBA) | ISNUMBER returns (worksheet function) |
123 | Number | TRUE | TRUE |
“123” | Number in form of string | TRUE | FALSE |
12/2/2020 | Date | FALSE | TRUE |
“12/2/2020” | Date in form of String | FALSE | FALSE |
DateSerial(2020,10,2) | Date in form of Date Value | FALSE | FALSE |
3:00:00 AM | Time placed in a cell | TRUE | TRUE |
“3:00:00 AM” | Time in form of String | FALSE | FALSE |
TimeSerial(3, 0,0) | Time in form of Time Value | FALSE | FALSE |
“” (blank) | String | FALSE | TRUE |
See also:
- Else if in VBA
This post will guide you on how to check if a number is an integer in Excel using different methods. Excel provides built-in functions such as the INT and MOD functions that you can use to determine if a number is an integer.
Additionally, you can create a user-defined function using VBA code to check if a number is an integer. By using these methods, you can easily determine if a number is an integer and use it in your calculations or data analysis in Excel.
Table of Contents
- 1. Check If Value is Integer Using INT Function
- 2. Check If a Number is Integer Using MOD Function
- 3. Check If a Number is Integer with User Defined Function (VBA Code)
- 4. Video: Check If Cell Value is Integer
- 5. Related Functions
1. Check If Value is Integer Using INT Function
Assuming that you have a list of data in range B1:B5, in which contain numeric values. And you want to test each cell value if it is an integer, if true, returns TRUE, otherwise, returns FALSE. How can I do it. You can use a formula based on the INT function to achieve the result. Like this:
=INT(B1)=B1
Type this formula into a blank cell, such as: Cell C1, and press Enter key on your keyboard. Then copy this formula from cell C1 to range C2:C5 to apply this formula to check values.
Let’s see how this formula works:
The INT function try to extract the integer portion from a given cell value, if the returned value is equal to the default cell value, it indicated that numeric value is an integer.
2. Check If a Number is Integer Using MOD Function
You can also use the MOD function in combination with IF function to check if a cell value is integer in Microsoft Excel Spreadsheet. Just use the following MOD formula:
=IF(MOD(B1,1)=0, "TRUE", "FALSE ")
Select a cell where you want to display the result, then enter this formula, press Enter.
The MOD function in Excel is used to return the remainder after dividing one number by another. If a number is divided by 1 and the remainder is 0, then the number is an integer.
3. Check If a Number is Integer with User Defined Function (VBA Code)
You can create a user-defined function in VBA (Visual Basic for Applications) to check if a number is an integer in Excel. Here’s how you can do it:
Step1: Open Excel and press Alt + F11 to open the Visual Basic Editor.
Step2: In the editor, click on Insert > Module to create a new module.
Step3: Type the following code into the module:
Function IsInteger_ExcelHow(ByVal num As Double) As Boolean If num = Int(num) Then IsInteger_ExcelHow = True Else IsInteger_ExcelHow = False End If End Function
Step4: Save the module and return to the Excel worksheet.
Step5: In the cell where you want to display the result, enter the formula:
=IsInteger_ExcelHow(B1)
where B1 is the cell containing the number you want to check.
If the number in cell B1 is an integer, the formula will return TRUE. If it is not an integer, the formula will return FALSE.
4. Video: Check If Cell Value is Integer
This video will guide you how to check if a number is integer in Cells in Excel with different methods.
- Excel INT function
The Excel INT function returns the integer portion of a given number. And it will rounds a given number down to the nearest integer.The syntax of the INT function is as below:= INT (number)…
Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.
Проверка переменных и выражений
Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.
Синтаксис функций для проверки переменных и выражений:
Expression — выражение, переменная или необязательный аргумент для IsMissing.
Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.
Функция IsArray
Описание функции
Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:
- True — переменная является массивом;
- False — переменная не является массивом.
Пример с IsArray
Sub Primer1() Dim arr1(), arr2(1 To 10), arr3 Debug.Print IsArray(arr1) ‘Результат: True Debug.Print IsArray(arr2) ‘Результат: True Debug.Print IsArray(arr3) ‘Результат: False arr3 = Array(1, 2, 3, 4, 5) Debug.Print IsArray(arr3) ‘Результат: True End Sub |
Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.
Функция IsDate
Описание функции
Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:
- True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
- False — в иных случаях.
Пример с IsDate
Sub Primer2() Dim d1 As String, d2 As Date Debug.Print IsDate(d1) ‘Результат: False Debug.Print IsDate(d2) ‘Результат: True d1 = «14.01.2023» Debug.Print IsDate(d1) ‘Результат: True Debug.Print IsDate(Now) ‘Результат: True End Sub |
Функция IsEmpty
Описание функции
Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:
- True — переменная содержит значение Empty;
- False — переменной присвоено значение, отличное от Empty.
Пример с IsEmpty
Sub Primer3() Dim s As String, v As Variant Debug.Print IsEmpty(s) ‘Результат: False Debug.Print IsEmpty(v) ‘Результат: True v = 125 Debug.Print IsEmpty(v) ‘Результат: False Range(«A1»).Clear Debug.Print IsEmpty(Range(«A1»)) ‘Результат: True Range(«A1») = 123 Debug.Print IsEmpty(Range(«A1»)) ‘Результат: False End Sub |
Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).
Функция IsError
Описание функции
Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:
- True — аргумент функции является значением ошибки, определенной пользователем;
- False — в иных случаях.
Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.
Пример с IsError
Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:
Function Vkuba(x) If IsNumeric(x) Then Vkuba = x ^ 3 Else Vkuba = CVErr(25) End If End Function Sub Primer4() Debug.Print Vkuba(5) ‘Результат: 125 Debug.Print IsError(Vkuba(5)) ‘Результат: False Debug.Print Vkuba(«пять») ‘Результат: Error 25 Debug.Print IsError(Vkuba(«пять»)) ‘Результат: True End Sub |
Функция IsMissing
Описание функции
Функция IsMissing возвращает значение типа Boolean, указывающее, был ли необязательный аргумент типа данных Variant передан процедуре:
- True — если в процедуру не было передано значение для необязательного аргумента;
- False — значение для необязательного аргумента было передано в процедуру.
Пример с IsMissing
Function Scepka(x, Optional y) If Not IsMissing(y) Then Scepka = x & y Else Scepka = x & » (а необязательный аргумент не подставлен)» End If End Function Sub Primer5() Debug.Print Scepka(«Тропинка», » в лесу») ‘Результат: Тропинка в лесу Debug.Print Scepka(«Тропинка») ‘Результат: Тропинка (а необязательный аргумент не подставлен) End Sub |
Функция IsNull
Описание функции
Функция IsNull возвращает логическое значение, указывающее, является ли Null значением переменной или выражения:
- True — значением переменной или выражения является Null;
- False — в иных случаях.
Пример с IsNull
Функция IsNull особенно необходима из-за того, что любое условие с выражением, в которое входит ключевое слово Null, возвращает значение False:
Sub Primer6() Dim Var Var = Null If Var = Null Then Debug.Print Var ‘Результат: «» If Var <> Null Then Debug.Print Var ‘Результат: «» If IsNull(Var) Then Debug.Print Var ‘Результат: Null End Sub |
Функция IsNumeric
Описание функции
Функция IsNumeric возвращает значение типа Boolean, указывающее, можно ли значение выражения или переменной рассматривать как число:
- True — если аргумент функции может рассматриваться как число;
- False — в иных случаях.
Пример с IsNumeric
Sub Primer7() Debug.Print IsNumeric(«3,14») ‘Результат: True Debug.Print IsNumeric(«четыре») ‘Результат: False End Sub |
Функция IsObject
Описание функции
Функция IsObject возвращает логическое значение, указывающее, является ли переменная объектной:
- True — переменная содержит ссылку на объект или значение Nothing;
- False — в иных случаях.
Функция IsObject актуальна для переменных типа Variant, которые могут содержать как ссылки на объекты, так и значения других типов данных.
Пример с IsObject
Sub Primer8() Dim myObj As Object, myVar As Variant Debug.Print IsObject(myObj) ‘Результат: True Debug.Print IsObject(myVar) ‘Результат: False Set myVar = ActiveSheet Debug.Print IsObject(myVar) ‘Результат: True End Sub |
VBA IsNumeric
IsNumber an excel function is used for identifying whether the cell content is a number or not. A numeric value can be a whole value or integer. An IsNumeric function can also be performed in VBA as well. In VBA this is available with the name “IsNumeric“. IsNumeric works in the same manner as IsNumber does. It analyzes the cell value and returns the answer whether it is a number or not.
IsNumeric considers only Boolean, which only gives result in the form of TRUE and FALSE.
Syntax of IsNumeric in Excel VBA
VBA IsNumeric has the following syntax in VBA:
How to Use Excel VBA IsNumeric?
We will learn how to use a VBA IsNumeric with few examples in excel.
You can download this VBA IsNumeric Excel Template here – VBA IsNumeric Excel Template
VBA IsNumeric – Example #1
Let’s see an easy example where we will select a cell with any content and in a separate cell, we will see whether cell content is a Number or Not.
Step 1: For this open, a new module in the VBA window under the Insert menu tab as shown below.
Step 2: Write a Subcategory in the name of a performed function or in any other name as shown below.
Code:
Sub VBA_Isnumeric1() End Sub
Step 3: Now we will use the If-Else loop for this complete condition. For this open and close If bracket as shown below.
Code:
Sub VBA_Isnumeric1() If End If End Sub
Step 4: Now in If write and select IsNumeric function and select any Range cell from where we will analyze the content. Here we have selected cell A1 as TRUE.
Code:
Sub VBA_Isnumeric1() If IsNumeric(Range("A1")) = True Then End If End Sub
Step 5: If cell value at cell A1 is TRUE it means it is a number then we can choose writing any sentence in cell B1 which will say “It is a Number” or put any text as per your choice.
Code:
Sub VBA_Isnumeric1() If IsNumeric(Range("A1")) = True Then Range("B1") = "It is a Number" End If End Sub
Step 6: Now in Else line of code consider writing what we could see when IF condition doesn’t work. We are selecting cell B1 where we will see the output statement of cell A1 as “It is not a Number” as shown below.
Code:
Sub VBA_Isnumeric1() If IsNumeric(Range("A1")) = True Then Range("B1") = "It is a Number" Else Range("B1") = "It is not a Number" End If End Sub
Step 7: Once done then compile and run the complete code. As we can see in the below screenshot for the cell content A1 we got the statement as “It is a Number” in cell B1.
Step 8: Now let’s replace 10 in cell A1 with a text like “Test” and see what we get.
Step 9: Now again run the complete code.
As we can see in the above screenshot, for the cell content A1 we got the statement as “It is not a number” for content “Test” which means cell A1 doesn’t have a number in it.
VBA IsNumeric – Example #2
There is another way to add IsNumeric. By far we all know that Boolean function is used for TRUE/ FALSE on the basis of what we feed and define the condition. Here we will use Boolean to calculate IsNumeric for any content of the cell.
Step 1: Write a Subcategory in the name of a performed function as shown below.
Code:
Sub VBA_IsNumeric2() End Sub
Step 2: Now define a dimension “DIM” as A and assign it to Double. We can assign it as Integer or Long too. But that would only consider whole numbers and long text/numbers. Double is used where we are expecting to get numbers in decimal forms.
Code:
Sub VBA_IsNumeric2() Dim A As Double End Sub
Step 3: Now define one more dimension “DIM” as X. And assign it as Boolean. We can consider any word, name or alphabet for defining dimensions in VBA.
Code:
Sub VBA_IsNumeric2() Dim A As Double Dim X As Boolean End Sub
Step 4: Now for Dim A double, first assign the value as 10 which is a whole number.
Code:
Sub VBA_IsNumeric2() Dim A As Double Dim X As Boolean A = 10 End Sub
Step 5: Now for Boolean X, use IsNumeric function and assign defined Double A into the brackets of IsNumeric. By doing this IsNumeric will fetch the value stored in Dim A and analyze whether that value is a number or not.
Code:
Sub VBA_IsNumeric2() Dim A As Double Dim X As Boolean A = 10 X = IsNumeric(A) End Sub
Step 6: To get the answer of an analysis done by Isnumeric, we will assign it to a message box where we will see the result.
Code:
Sub VBA_IsNumeric2() Dim A As Double Dim X As Boolean A = 10 X = IsNumeric(A) MsgBox "The expression(10) is numeric or not : " & X, vbInformation, "VBA IsNumeric Function" End Sub
Step 7: Once done compile and run the code.
As we can see a pop-up dialog box in the above image, the expression(10) is a TRUE numeric value.
Step 8: Now let’s change the value and put some decimal value in IsNumeric as shown below and see what output we get. Here we have to change the value of A as 10.12 and updated the message box with expression(10.12).
Code:
Sub VBA_IsNumeric2() Dim A As Double Dim X As Boolean A = 10.12 X = IsNumeric(A) MsgBox "The expression(10.12) is numeric or not : " & X, vbInformation, "VBA IsNumeric Function" End Sub
Step 9: Now again compile and run the complete code.
We will again get TRUE for the value 10.12 which is a decimal value.
Step 10: Now let’s see if the current defined syntax of IsNumeric still works for other than numbers or not. For this, we need to change the Dim A as String which means we will be entering the Text value here. And change value entered for A. We have considered sample value as “ABC”. Make all necessary changes in related fields where we can place text instead of numbers and keep the rest of the things as it is.
Code:
Sub VBA_IsNumeric2() Dim A As String Dim X As Boolean A = ABC X = IsNumeric(A) MsgBox "The expression('ABC') is numeric or not : " & X, vbInformation, "VBA IsNumeric Function" End Sub
Step 11: After that compile and run the complete code.
Pros of Excel VBA IsNumeric
- It is so easy to apply IsNumeric in VBA. It is as simple as applying Isnumber through insert function.
- IsNumeric and IsNumber give the same result.
Cons of Excel VBA IsNumeric
- Applying example-2 where we need to insert text makes the simple process lengthy.
Things To Remember
- Recording a macro is also a way to perform IsNumeric function in VBA.
- Save the file in Macro-Enabled Excel, This is the best way to avoid losing written code.
- Best way to avoid any error while running the code is to first compile the complete code before we fix it as final.
- Assigning the created code into a button is also a way to perform created macro quickly, this saves time.
- If you are applying IsNumeric by example-2 method then remember to keep text in the single quote (‘Text’) otherwise it will give an error.
- As IsNumeric in VBA is used, in excel it used in the name of IsNumber.
Recommended Articles
This has been a guide to VBA IsNumeric. Here we discussed how to use Excel VBA IsNumeric along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA Dim
- VBA RGB
- VBA IFError
- VBA Login
В языке VBA есть универсальные типы данных, т.е. способные хранить как число, так и строку, дату и любой другой тип информации. Например, ячейка в таблице может содержать что угодно и изначально, программа не знает какой в ней тип данных хранится. Кроме того, в самой программе может использоваться тип данных Variant, который так же может содержать любое значение любого типа.
Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.
Способ 1. Использовать функцию TypeName для определения типа данных
Эта функция возвращает строку с названием типа данных на английском. В качестве аргумента принимает переменную, значение ячейки.
Обратите внимание: Функция определяет только стандартные типы данных и не может определить пользовательский тип (определенный с помощью Type).
Возможные возвращаемые функцией значения:
Byte | Число типа Byte |
Integer | Целое число |
Long | Длинное целое число |
Single | Число одиночной точности с плавающей запятой |
Double | Число двойной точности с плавающей запятой |
Currency | Валюта |
Decimal | Число с плавающей запятой |
Date | Дата |
String | Строка |
Boolean | Логическое |
Error | Ошибка |
Empty | Не проинициализировано (т.е. переменная не была объявлена) |
Null | Неверные данные (в переменной нет корректных данных) |
Object | Объект (класс) |
Unknown | Тип данных не известен |
Nothing | Объект, никуда не ссылающийся |
Приведу несколько примеров по использованию TypeName.
Пример 1. Определение типа переменной.
Dim v As Integer MsgBox TypeName(v) ' Выведет: Integer
Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.
Пример 2. Использование TypeName в условии.
Dim v As Integer If TypeName(v) = "Integer" Then MsgBox "Yes" Else MsgBox "No" ' Yes If TypeName(v) = "integer" Then MsgBox "Yes" Else MsgBox "No" ' No If LCase(TypeName(v)) = "integer" Then MsgBox "Yes" Else MsgBox "No" ' Yes
Пример 3. Определение типа данных в ячейке.
MsgBox TypeName(Cells(1, 1).Value) ' Выведет тип данных в ячейке A1
Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.
Пример 4. Определение типа массива.
Dim Arr1(10) As Integer Dim Arr2(10) MsgBox TypeName(Arr1) ' Выведет: Integer() MsgBox TypeName(Arr2) ' Выведет: Variant()
Способ 2. Проверка на возможность преобразования строки к нужному типу.
Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.
IsNumeric | Проверяет может ли выражение быть преобразовано в число |
IsDate | Проверяет может ли выражение быть преобразовано в дату |
IsObject | Проверяет, является ли переменная объектом |
IsArray | Проверяет, является ли переменная массивом |
IsNull | Проверка на пустое значение |
IsError | Проверка выражения на ошибку |
Пример 4. Определение может ли переменная быть преобразована в число.
Dim v As String If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no (т.к. в строке нет числа) v = "120" If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes v = "120.45" If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no v = "test 120" If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no v = "120 test" If IsNumeric(v) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no
К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.
Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).
Dim firstDate, secondDate As Date Dim timeOnly, dateAndTime, noDate As String firstDate = CDate("12.05.2017") secondDate = #12/5/2017# timeOnly = "15:45" dateAndTime = "12.05.2017 15:45" noDate = "Test" If IsDate(firstDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes If IsDate(secondDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes If IsDate(timeOnly) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes If IsDate(dateAndTime) Then MsgBox "yes" Else MsgBox "no" ' Выведет: yes If IsDate(noDate) Then MsgBox "yes" Else MsgBox "no" ' Выведет: no
Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.
Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.
Здравствуйте! |
|
LightZ Пользователь Сообщений: 1748 |
Может я что-то не правильно понял? Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Понял ошибку. Я пробовал Is Numeric. |
|
LightZ Пользователь Сообщений: 1748 |
Не за что Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=LightZ}{date=09.07.2012 07:29}{thema=}{post}Debug.Print IIf(Application.IsText(Cells(1, 1).Value), «Text», «Numeric»){/post}{/quote}С этим нужно осторожнее: при пустом значении и дате, получим неверные ответы |
Ну мне для решения конкретной задачи больше всего походит первый вариант в виде: |
|
ZVI Пользователь Сообщений: 4328 |
Добрый вечер, Михаил! |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Здравствуйте все. В дополнение, и это тоже: Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Забыл еще: Я сам — дурнее всякого примера! … |
LightZ Пользователь Сообщений: 1748 |
Так я думаю вряд ли кто-то будет использовать Const x As Long = «111»: Const z As String = «abc» False True Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Богдан, вот это — неправильно: Я сам — дурнее всякого примера! … |
LightZ Пользователь Сообщений: 1748 |
Серёж, а в чём разница то? Const x As Long = «111» Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
«111» — строка |
{quote}{login=ZVI}{date=09.07.2012 09:56}{thema=}{post}Добрый вечер, Михаил! |
|
LightZ Пользователь Сообщений: 1748 |
{quote}{login=Юрий М}{date=09.07.2012 11:37}{thema=}{post}»111″ — строка Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Богдан, а тогда зачем объявлять заведомо неверно? Об этом Серж и говорит… Если «111», ту нужно и писать: As String. Если хотим числовую переменную — кавычки не нужны. Вот о чём разговор. |
> А почему к «d» и «e» такое «избранное» отношение? Михаил, это экспоненциальная запись числа. 1d3=1000, 1e2=100. ?isnumeric(«ff»),isnumeric(«&hff»),isnumeric(«&o75»),isnumeric(«&o79») |
|
Я попробовал так: хоть 234е765б + 1 хоть 123d765 + 1 =11 (+25 = 35) |
|
k61 Пользователь Сообщений: 2441 |
IsNumeric(«ЧислоИлиЦифра» & Chr(160) & «ЧислоИлиЦифра»)=True |
Если данные будут считываться только из ячеек рабочего_листа: Function ValueIsNumber(X) As Boolean Если даты или логические не считать числами — удалить vbDate или vbBoolean |
|
LightZ Пользователь Сообщений: 1748 |
{quote}{login=Юрий М}{date=10.07.2012 10:40}{thema=}{post}Богдан, а тогда зачем объявлять заведомо неверно? Об этом Серж и говорит… Если «111», ту нужно и писать: As String. Если хотим числовую переменную — кавычки не нужны. Вот о чём разговор.{/post}{/quote}Юрий, я понял. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Если других данных не будет, то всё нормально. Весь сыр-бор разгорелся из-за того, что с проверкой типа есть подводные камни, и их желательно учитывать. |
LightZ Пользователь Сообщений: 1748 |
Загвоздочка может произойти только с пробелом или пустой ячейкой, т.к. vba считает, что пустая ячейка это число, а вот с датой проблем нет (false) Dim x As Range Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
ran Пользователь Сообщений: 7091 |
Что-то я не улавливаю. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=LightZ}{date=10.07.2012 10:01}{thema=}{post}Загвоздочка может произойти только с пробелом или пустой ячейкой, т.к. vba считает, что пустая ячейка это число, а вот с датой проблем нет {/post}{/quote}Ну как же нет? |
ZVI Пользователь Сообщений: 4328 |
E — это экспоненциальная форма записи числа В окне Immediate: Если вписать в VBA-модуле, например, такую строку: |
Павел Гость |
#27 10.07.2012 22:23:57 2 Михаил С
Точка и знаки «d» и «e» могут быть частью записи числа, не поэтому ли? |
||
LightZ Пользователь Сообщений: 1748 |
RAN, воспроизведите макрос: .Value = Empty Т.е. с помощью Application.Trim(x.Value) убиваю сразу двух зайцев: пустоту и пробел Юрий, я описал про IsNumeric, а с текстом придется учитывать и дату With Cells(1, 1) Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=LightZ}{date=10.07.2012 10:29}{thema=}{post}Юрий, я описал про IsNumeric, а с текстом придется учитывать и дату{/post}{/quote}Я реагировал на это: |
Михаил С. Пользователь Сообщений: 10514 |
#30 10.07.2012 23:15:44 Такой, казалось бы, простой вопрос, а столько подводных камней! |