I have used the following VBA code:
Do While .Cell(i,1) <> Empty
' doing things
i = i+1
Loop
to iterate through columns (with Double/Integer values) in Excel. Then I found a case where the test evaluates to False whenever the value of the cell is 0. I have no idea what the difference is between this case and the working ones.
If I change the test to:
Do While Not IsEmpty(.Cell(i,1))
..
Loop
it works fine. So my question is: What is the difference between how IsEmpty() and =Empty is evaluated? In what cases will =Empty evaluate to True for cells with value 0?
asked Dec 15, 2011 at 15:17
2
Empty
refers to a variable being at its default value. So if you check if a cell with a value of 0 = Empty
then it would return true.
IsEmpty
refers to no value being initialized.
In a nutshell, if you want to see if a cell is empty (as in nothing exists in its value) then use IsEmpty
. If you want to see if something is currently in its default value then use Empty
.
answered Dec 15, 2011 at 16:15
Justin SelfJustin Self
6,0773 gold badges31 silver badges48 bronze badges
3
From the Help:
IsEmpty returns True if the variable is uninitialized, or is explicitly set to Empty; otherwise, it returns False. False is always returned if expression contains more than one variable.
IsEmpty only returns meaningful information for variants.
To check if a cell is empty, you can use cell(x,y) = ""
.
You might eventually save time by using Range("X:Y").SpecialCells(xlCellTypeBlanks)
or xlCellTypeConstants
or xlCellTypeFormulas
answered Dec 15, 2011 at 16:22
iDevlopiDevlop
24.6k11 gold badges89 silver badges147 bronze badges
1
I believe IsEmpty is just method that takes return value of Cell and checks if its Empty so:
IsEmpty(.Cell(i,1)) does ->
return .Cell(i,1) <> Empty
answered Dec 15, 2011 at 15:19
4
Проверка переменных и выражений с помощью встроенных функций 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 |
Excel VBA — Empty, ZLS, Null, Nothing, Missing
————————————
Contents:
Empty
VarType Function
Null
Nothing
Missing
————————————
In excel vba we often refer to an Empty variable, ZLS (zero-length string) or null string or vbNullString, Null value, Missing Argument, or using the Nothing keyword with an object variable. It is important to differentiate and understand these terms and expressions while using them in your vba code. In this section, we will also understand using the VarType Function to determine the subtype of a variable, using the IsEmpty & IsNull Functions to check for Empty & Null values, and using the IsMissing Function to check whether optional arguments have been passed in the procedure or not.
Empty
When you declare a variable in your code using a Dim statement, you are setting aside sufficient memory for the variable (viz. 2 bytes for a Boolean or Integer variable, 4 bytes for a Long variable, and so on), and that the information being stored in the variable has an allowable range (of True or False for a Boolean variable, a whole number between -32,768 to 32,767 for an Integer variable, a whole number between -2,147,483,648 to 2,147,483,647 for a variable subtype of Long, and so on). You will receive a run-time error if trying to assign a string value to a variable declared as Integer.
While declaring a variable if you do not specify its data type, or if you do not declare a variable at all it will default to Variant data type that can hold any type of data (string, date, time, Boolean, or numeric values) & can automatically convert the values that it contains. However, the disadvantage is that this makes Excel reserve more memory than is required (at least 16 bytes), and could also result in mistyping a variable name and not knowing it viz. you might type rowNumbre instead of rowNumber.
When you run a macro, all variables are initialized to a default value. The initial default value: for a numeric variable is zero; for a variable length string it is a zero-length or empty string («»); a fixed length string is initialized with the ASCII code 0, or Chr(0); an object variable defaults to Nothing; a Variant variable is initialized to Empty. In numeric context, an Empty variable denotes a zero while in a string context an Empty variable is a zero-length string («») . A zero-length string («») is also referred to as a null string. However, it is advised to explicitly specify an initial value for a variable instead of relying on its default initial value.
Empty indicates that no beginning value has been assigned to a Variant variable ie. a variable which has not been initialized. An Empty variable is represented as 0 in a numeric context or a zero-length string («») in a string context. Empty is not the same as Null which indicates that a variable contains no valid data.
The Empty keyword indicates an uninitialized variable value. It is used as a Variant subtype. You can assign the Empty keyword to explicitly set a variable to Empty.
IsEmpty Function
Use the IsEmpty Function to check whether a variable has been initialized. The function returns a Boolean value — returns True for an uninitialized variable or if a variable is explicitly set to Empty, otherwise the function returns False. Syntax: IsEmpty(expression), where expression is a Variant variable which you want to check. See below example(s) where we use this function to check if a variant variable is empty.
Empty, Blank, ZLS (zero-length string), null string & vbNullString
ZLS means a zero-length string («»), is also referred to as a null string, and has a length of zero (0). For all practical purposes using vbNullString is equivalent to a zero-length string («») because VBA interprets both in a similar manner, though both are actually not the same — a ‘zero length string’ actually means creating a string with no characters, whereas vbNullString is a constant used for a null pointer meaning that no string is created and is also more efficient or faster to execute than ZLS. You can use «» or vbNullString alternatively in your code and both behave similarly. Note that there is no Blank keyword in vba, but we can refer to ‘blank cells‘ or «empty cells» in Excel spreadsheet. There are Excel worksheet functions for empty cells: (i) the COUNTA function counts the number of cells that are not empty, and also counts or includes a cell with empty text («») — also referrred to as empty string or zero length string — which is not counted as an empty cell; and (ii) the ISBLANK function returns True for an empty cell, and does not treat a zero-length string («») as a blank (empty cell) similarly as in COUNTA. Both the worksheet functions of ISBLANK and COUNTA distinguish between an empty cell and a cell containing a zero-length string (ie. «» as formula result).
VarType Function
Use the VarType Function to determine the subtype of a variable. Syntax: VarType(variable_name). The function returns an Integer indicating the variable’s subtype. The variable_name can be any variable except a user-defined data type (data type defined using the Type statement) variable. Examples of return values are: value 0 (VarType constant — vbEmpty, uninitialized / default), value 1 (VarType constant — vbNull, contains no valid data), value 2 (VarType constant — vbInteger, Integer), value 3 (VarType constant — vbLong, Long Integer), and so on. The VarType constants can be used anywhere in your code in place of the actual values.
Example — Empty variable:
Sub EmptyVar()
‘Empty variable
‘variable var1 has not been declared, hence it is a Variant data type:
‘returns 0, indicating variable subtype Empty:
MsgBox VarType(var1)
‘returns True, indicating variable subtype Empty:
MsgBox IsEmpty(var1)
‘returns False — is an Empty variable, not a Null variable — no beginning value has been assigned to a Variant variable:
MsgBox IsNull(var1)
‘Empty indicates a Variant variable for which you do not explicity specify an initial value, which by default gets initialized in VBA to a value that is represented as both a zero and a zero-length string.
‘returns both messages as below:
If var1 = 0 Then
MsgBox «Empty Variable represented as Zero»
End If
If var1 = «» Then
MsgBox «Empty Variable represented as a Zero-Length (Null) String»
End If
End Sub
Example — Testing for Empty:
Sub EmptyCheck()
‘testing for Empty
Dim var1 As Variant
‘variable not initialized — returns 0, indicating variable subtype Empty:
MsgBox VarType(var1)
‘returns True, indicating variable subtype Empty:
MsgBox IsEmpty(var1)
‘————
‘initialize the variable by specifying a string value:
var1 = «Hello»
‘returns 8, indicating variable subtype String:
MsgBox VarType(var1)
‘returns False, indicating variable is not Empty:
MsgBox IsEmpty(var1)
‘————
‘assign Empty keyword to set variable to Empty:
var1 = Empty
‘returns 0, indicating variable subtype Empty:
MsgBox VarType(var1)
‘returns True, indicating variable is Empty:
MsgBox IsEmpty(var1)
‘————
‘returns True for an empty worksheet cell, otherwise False:
MsgBox IsEmpty(ActiveCell)
End Sub
Example — Initialize a Variant variable:
Sub VarInitialized()
‘initialized variable
Dim var1 As Variant
‘variable has been initialized to a zero-length string («»):
var1 = «»
‘returns False, indicating variable is NOT Empty:
MsgBox IsEmpty(var1)
‘returns 8, indicating variable subtype String:
MsgBox VarType(var1)
‘returns — «Variable value is a Zero-Length String»
If var1 = «» Then
MsgBox «Variable value is a Zero-Length String»
Else
MsgBox «Variable value is NOT a Zero-Length String»
End If
‘returns — «Variable value is NOT Zero»
If var1 = 0 Then
MsgBox «Variable value is Zero»
Else
MsgBox «Variable value is NOT Zero»
End If
End Sub
Example — Check a zero-length string:
Sub CheckZLS()
‘check a zero-length string
Dim var1 As Variant
‘variable not initialized — returns 0, indicating variable subtype Empty — represented both as Zero (0) and a Zero-Length (Null) String:
MsgBox VarType(var1)
‘returns «True» for all If statements below:
If var1 = «» Then
MsgBox «True»
End If
If var1 = vbNullString Then
MsgBox «True»
End If
If Len(var1) = 0 Then
MsgBox «True»
End If
End Sub
Null
In VBA, Null keyword is used to indicate that a variable contains no valid data. A value indicating that a variable contains no valid data. Null is the result — (i) if you explicitly assign Null to a variable, or (ii) if you perform any operation between expressions that contain Null. The Null keyword is used as a Variant subtype ie. only a Variant variable can be Null, and and variable of any other subtype will give an error. Null is not the same as a zero-length string («»), and neither is Null the same as Empty, which indicates that a variable has not yet been initialized.
If you try to get the value of a Null variable or an expression that is Null, you will get an error of ‘Invalid use of Null’ (Run-time Error 94). You will need to ensure the variable contains a valid value. Refer Image 1.
IsNull Function
The IsNull Function returns a Boolean value — True for an expression that is Null (containing no valid data), or else False for an expression that contains valid data. Syntax: IsNull(expression). The expression argument is a variant that contains a numeric or string value, and is necessary to specify.
Example — Integer variable:
Sub VarInteger()
‘no beginning value assigned to a variable of subtype Integer
Dim intVar As Integer
‘returns False (intVar is not Null & neither is it Empty) — no beginning value has been assigned to a variable of subtype Integer:
MsgBox IsNull(intVar)
‘returns 2, indicating variable subtype Integer:
MsgBox VarType(intVar)
‘returns — «Variable value is Zero» (The initial default value for a numeric variable is zero)
If intVar = 0 Then
MsgBox «Variable value is Zero»
Else
MsgBox «Variable value is NOT Zero»
End If
End Sub
Example — Evaluate Empty / Null variable, use IsNull & VarType vba functions:
Sub EmptyNullVar()
‘evaluate Empty / Null variable, use IsNull & VarType vba functions.
Dim var1 As Variant
‘returns False, var1 is not Null but an Empty variable (no beginning value has been assigned to a Variant variable):
MsgBox IsNull(var1)
‘variable not initialized — returns 0, indicating variable subtype Empty:
MsgBox VarType(var1)
‘returns the message because var1 is an Empty variable:
If var1 = 0 And var1 = vbNullString Then
MsgBox «Empty Variable represented both as Zero (0) and a Zero-Length (Null) String»
End If
‘——————-
‘variable is initialized to a zero-length string («») or vbNullString:
var1 = vbNullString
‘returns False — var1 is not a Null variable:
MsgBox IsNull(var1)
‘returns 8, indicating variable subtype String:
MsgBox VarType(var1)
‘——————-
‘explicitly assigning Null to a variable:
var1 = Null
‘returns True, for a Null variable, containing no valid data:
MsgBox IsNull(var1)
‘returns 1, indicating variable subtype Null:
MsgBox VarType(var1)
‘——————-
‘explicitly assigning valid data to a variable:
var1 = 12
‘returns False, for a variable containing valid data:
MsgBox IsNull(var1)
‘returns 2, indicating variable subtype Integer:
MsgBox VarType(var1)
‘——————-
‘returns False, for an expression containing valid data:
MsgBox IsNull(«Hello»)
End Sub
Example — Check a Null variable:
Sub CheckNull()
‘check a Null variable
‘explicitly assigning Null to a variable:
var1 = Null
‘returns 1, indicating variable subtype Null:
MsgBox VarType(var1)
‘returns the message, indicating variable subtype Null:
If VarType(var1) = vbNull Then
MsgBox «Null variable»
End If
‘an expression containing Null also evaluates to Null:
var2 = Null + 2
‘returns 1, indicating variable subtype Null:
MsgBox VarType(var2)
End Sub
Example — Check worksheet cell for Empty, ZLS, Null:
Sub WorksheetCell_ZLS_Empty_Null()
‘check worksheet cell for Empty, ZLS, Null
Dim var1 As Variant
‘returns True:
MsgBox vbNullString = «»
‘In the case where ActiveCell is Blank:
‘returns True for a Blank cell:
MsgBox ActiveCell.Value = «»
MsgBox ActiveCell.Value = vbNullString
MsgBox ActiveCell.Value = 0
MsgBox IsEmpty(ActiveCell.Value)
‘assign Active Cell value to variable:
var1 = ActiveCell.Value
‘returns True:
MsgBox IsEmpty(var1)
MsgBox var1 = vbNullString
MsgBox var1 = «»
MsgBox var1 = 0
‘returns False:
MsgBox VarType(var1) = vbNull
‘returns 0, indicating variable subtype Empty:
MsgBox VarType(var1)
‘If you enter «» in the Active Cell ie. the active cell contains the value: =«»
‘returns True:
MsgBox ActiveCell.Value = «»
MsgBox ActiveCell.Value = vbNullString
‘returns False:
MsgBox ActiveCell.Value = 0
MsgBox IsEmpty(ActiveCell.Value)
End Sub
Nothing
Assigning the Nothing keyword to an object variable disassociates the variable from an actual object. Nothing is assigned to an object variable by using the Set statement. You can assign the same actual object to multiple object variables in vba code, and this association uses your system resources and memory. The system resources and memory get released only either after you assign Nothing to all object variables using the Set statement which disassociates these variables from the actual object, or when all object variables go out of scope and get destroyed. It is advisable to explicity set all object variables to Nothing at the end of your procedure or even earlier while running your code when you finish using them, and this will release memory allocated to these variables.
Determine if the object variable is initialized — use Is Nothing for objects: To check if an object has been assigned or set, use the Is keyword with Nothing, viz. If object_variable Is Nothing. For objects, you cannot test if an object_variable is equal to something, and using = instead of Is will give an error.
Example — Using the Nothing keyword with an object variable:
Sub ObjNothing()
‘using the Nothing keyword with an object variable
Dim objVar As Object
‘returns True, because you have not yet assigned an actual object to the object variable:
MsgBox objVar Is Nothing
Set objVar = ActiveSheet
‘returns False, because you have assigned an actual object (Sheet) to the object variable:
MsgBox objVar Is Nothing
Set objVar = Nothing
‘returns «Variable not associated with an actual object», because you have disassociated the object variable from an actual object:
If objVar Is Nothing Then
MsgBox «Variable not associated with an actual object»
Else
MsgBox «Actual object is assigned to an Object variable»
End If
End Sub
Missing
Passing Arguments to Procedures: When an external value is to be used by a procedure to perform an action, it is passed to the procedure by variables. These variables which are passed to a procedure are called arguments. An argument is the value supplied by the calling code to a procedure when it is called. When the set of parentheses, after the procedure name in the Sub or Function declaration statement, is empty, it is a case when the procedure does not receive arguments. However, when arguments are passed to a procedure from other procedures, then these are listed or declared between the parentheses.
Optional Arguments: Arguments can be specified as Optional by using the Optional keyword before the argument to its left. When you specify an argument as Optional, all other arguments following that argument to its right must
also be specified as Optional. Note that specifying the Optional keyword makes an argument optional otherwise the argument will be required.
Check if an argument is Missing, using the IsMissing function: The Optional argument should be (though not necessary) declared as Variant data type to enable use of the IsMissing function which works only when used with variables declared as Variant data type. The IsMissing function is used to determine whether the optional argument was passed in the procedure or not and then you can adjust your code accordingly without returning an error. If the Optional argument is not declared as Variant in which case the IsMissing function will not work, the Optional argument will be assigned the default value for its data type which is 0 for numeric data type variables (viz. Integer, Double, etc) and Nothing (a null reference) for String or Object data type variables.
IsMissing function: The IsMissing function is used to check whether optional Variant arguments have been passed in the procedure or not. Syntax: IsMissing(argname). The function returns a Boolean value — True if no value is passed for the optional argument, and False if a value has been passed for the optional argument. If the IsMissing function returns True for an argument, using the missing argument in the code will cause an error, and thus using this function will help in adjusting your code accordingly.
Example of using the IsMissing function to check if an argument is Missing:
Function FullName(strFirstName As String, Optional strSecondName As Variant) As String
‘The declaration of the procedure contains two arguments, the second argument is specified as Optional. Declaring the Optional argument as Variant data type will enable use of the IsMissing function.
‘The IsMissing function is used to determine whether the optional argument was passed in the procedure, and if not, you can adjust your code accordingly without returning an error.
If IsMissing(strSecondName) Then
FullName = strFirstName
Else
FullName = strFirstName & » « & strSecondName
End If
End Function
Sub GetName()
Dim strGivenName As String
strGivenName = InputBox(«Enter Given Name»)
‘specifying only the first argument & omitting the second argument which is optional:
MsgBox FullName(strGivenName)
End Sub
Two pet peeves of mine are the way the terms [unique and distinct] and [empty and blank] are interchangeably used in Excel. They have different meanings so it’s really confusing when the name of a function or utility suggests it will do one thing when, in fact, it does the other.
I’ve defined unique and distinct on previous posts such as this one, so I’ll put those to one side and concentrate today’s rant post on empty and blank. Before I highlight the inconsistencies between ISBLANK()
, COUNTBLANK()
and VBA.IsEmpty()
, here are my definitions of empty and blank cells:
- An empty cell can be defined as a cell that contains absolutely nothing: no constant, no formula and no prefix character.
- A blank cell can be defined as a cell which may be empty, or may contain a prefix character or a null string (formula result or constant).
Note that the formatting is ignored. These definitions are just my own – so please don’t take them as gospel – but they’re based on the behaviour of VBA.IsEmpty()
and COUNTBLANK()
.
Is A Cell Empty?
In a worksheet, the best way to check is a cell is empty is to use the ISBLANK()
worksheet function:
Row 3 indicates what is in the corresponding column in row 4.
The Range.Value
and Range.Value2
properties return a Variant/Empty
when the given cell is empty, so the best way to check if a cell is empty in VBA is to use the VBA.Information.IsEmpty()
function on their output:
Sub foo() Debug.Print IsEmpty(Sheet1.Range("A4").Value2) 'False Debug.Print IsEmpty(Sheet1.Range("B4").Value2) 'False Debug.Print IsEmpty(Sheet1.Range("C4").Value2) 'False Debug.Print IsEmpty(Sheet1.Range("D4").Value2) 'True End Sub
The ISBLANK()
worksheet function and VBA.IsEmpty()
give exactly the same results so, unless one considers blank and empty to mean the same thing, they’re obviously inconsistently named. By my own definition, ISBLANK()
should’ve been called ISEMPTY()
. It’s worth mentioning that the ISBLANK()
worksheet function isn’t available in VBA via the Application.WorksheetFunction
class: presumably because Microsoft recognised that its functionality was already covered by VBA.IsEmpty()
which is faster to call from VBA.
Is A Cell Blank?
The COUNTBLANK()
worksheet function does not behave in a consistent manner with its ISBLANK()
counterpart. COUNTBLANK()
will count empty cells, cells with a null string and cells which contain a prefix character. Yeah, I know, it’s pretty confusing. The upside is we can use COUNTBLANK()
to check if a cell is actually blank:
An easy way to check if a cell is blank from VBA is to call the Range.Value
(or Range.Value2
) property and compare the result to the VBA.Constants.vbNullString
constant:
Sub foo() Debug.Print IsBlank(Sheet1.Range("A4")) 'False Debug.Print IsBlank(Sheet1.Range("B4")) 'True Debug.Print IsBlank(Sheet1.Range("C4")) 'True Debug.Print IsBlank(Sheet1.Range("D4")) 'True End Sub Public Function IsBlank(ByRef rngToCheck As Range) As Boolean IsBlank = (CStr(rngToCheck.Cells(1).Value2) = vbNullString) End Function
It’s more efficient within VBA to do it this way than to call the Application.WorksheetFunction.CountBlank()
method.
Does A Cell Contain A Null String?
I’ve mentioned null strings a few times so I better explain what they are. A null string is a zero-length string that could be a constant or the result of a formula. For example, this formula returns a null string:
=""
If you copy that formula and paste special values then the cell will contain a constant null string. You can also sometimes get null strings when you import data from an external source, so they’re worth knowing about.
The HasNullString()
function below will return True
if a cell contains a null string. If you want formula results to be ignored (ie. check for constants only) then pass True
into the blnConstantsOnly
parameter . If the cell has a prefix character then the function will return False
.
Public Function HasNullString( _ ByRef rngToCheck As Range, _ Optional ByVal blnConstantsOnly As Boolean = False _ ) As Boolean Dim rngFirstCell As Range Dim strToCheck As String Dim varToCheck As Variant Set rngFirstCell = rngToCheck.Cells(1) varToCheck = rngFirstCell.Value2 If Not IsEmpty(varToCheck) Then If blnConstantsOnly Then strToCheck = rngFirstCell.Formula Else strToCheck = CStr(varToCheck) End If If strToCheck = vbNullString Then HasNullString = (LenB(rngFirstCell.PrefixCharacter) = 0) End If End If End Function
So, am I just being an old fuddy-duddy or do these inconsistencies annoy you too?
В этом учебном материале вы узнаете, как использовать Excel функцию ISEMPTY с синтаксисом и примерами.
Описание
Функцию ISEMPTY Microsoft Excel можно использовать для проверки пустых ячеек или неинициализированных переменных.
Функция ISEMPTY — это встроенная в Excel функция, которая относится к категории информационных функций. Её можно использовать как функцию VBA в Excel.
В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.
Синтаксис
Синтаксис функции ISEMPTY в Microsoft Excel:
IsEmpty( value )
Аргументы или параметры
- value
- Значение, которое вы хотите проверить.
Еслиvalue
— пустая ячейка или неинициализированная переменная, эта функция вернет True. В противном случае функция вернет False.
Возвращаемое значение
Функция ISEMPTY возвращает True, если value
является пустой ячейкой или неинициализированной переменной.
Функция ISEMPTY возвращает False, если value
является ячейкой или переменной, содержащей значение (т.е. не пусто).
Примечание
- См. также функцию ЕПУСТО (функция рабочего листа).
Применение
- Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Тип функции
- Функция VBA
Пример (как функция VBA)
Функцию ISEMPTY можно использовать только в коде VBA в Microsoft Excel. Мы можем использовать функцию ISEMPTY для проверки ячейки рабочего листа или переменной.
Давайте рассмотрим оба этих случая.
С ячейкой рабочего листа
Если вы хотите проверить, пуста ли ячейка рабочего листа в VBA, вы не можете использовать функцию рабочего листа ЕПУСТО. В VBA необходимо использовать функцию ISEMPTY. Вот пример того, как с помощью функции ISEMPTY проверить, пуста ли ячейка листа:
Sub TestCellA1() ‘Проверяет, является ли значение ячейки A1 пусто If IsEmpty(Range(«A1»).Value) = True Then MsgBox «Ячейка A1 пуста» End If End Sub |
В этом примере мы проверим, пуста ли ячейка A1.
Если ячейка A1 пуста, отобразится сообщение «Ячейка A1 пуста».
С переменной
Функцию ISEMPTY также можно использовать для проверки, инициализирована ли переменная.
Если переменная не была инициализирована, функция ISEMPTY вернет true. В противном случае функция вернет false.
Переменная не инициализирована
Давайте сначала рассмотрим пример, когда переменная не была инициализирована:
Sub TestVariable() Dim LResult ‘Проверить, инициализирована ли переменная If IsEmpty(LResult) = True Then MsgBox «Переменная не инициализирована.» End If End Sub |
В этом примере переменная с именем LResult была объявлена, но не была инициализирована значением. В результате функция ISEMPTY вернет true и отобразит сообщение «Переменная не инициализирована.»
Переменная инициализирована
Теперь мы изменим приведенный выше пример и инициализируем переменную LResult перед вызовом функции ISEMPTY.
Sub TestVariable() Dim LResult ‘Инициализировать переменную с именем LResult LResult = «Google is simply the best search engine!» ‘Проверить, инициализирована ли переменная If IsEmpty(LResult) = True Then MsgBox «Переменная не инициализирована.» End If End Sub |
Поскольку переменная LResult теперь инициализирована значением «Google is simply the best search engine!», Функция ISEMPTY вернет false, и окно сообщения отображаться не будет.