Операторы сравнения чисел и строк, ссылок на объекты (Is) и строк по шаблону (Like), использующиеся в VBA Excel. Их особенности, примеры вычислений.
Операторы сравнения чисел и строк
Операторы сравнения чисел и строк представлены операторами, состоящими из одного или двух математических знаков равенства и неравенства:
- < – меньше;
- <= – меньше или равно;
- > – больше;
- >= – больше или равно;
- = – равно;
- <> – не равно.
Синтаксис:
Результат = Выражение1 Оператор Выражение2 |
- Результат – любая числовая переменная;
- Выражение – выражение, возвращающее число или строку;
- Оператор – любой оператор сравнения чисел и строк.
Если переменная Результат будет объявлена как Boolean (или Variant), она будет возвращать значения False и True. Числовые переменные других типов будут возвращать значения 0 (False) и -1 (True).
Операторы сравнения чисел и строк работают с двумя числами или двумя строками. При сравнении числа со строкой или строки с числом, VBA Excel сгенерирует ошибку Type Mismatch (несоответствие типов данных):
Sub Primer1() On Error GoTo Instr Dim myRes As Boolean ‘Сравниваем строку с числом myRes = «пять» > 3 Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If End Sub |
Сравнение строк начинается с их первых символов. Если они оказываются равны, сравниваются следующие символы. И так до тех пор, пока символы не окажутся разными или одна или обе строки не закончатся.
Значения буквенных символов увеличиваются в алфавитном порядке, причем сначала идут все заглавные (прописные) буквы, затем строчные. Если необходимо сравнить длины строк, используйте функцию Len.
myRes = «семь» > «восемь» ‘myRes = True myRes = «Семь» > «восемь» ‘myRes = False myRes = Len(«семь») > Len(«восемь») ‘myRes = False |
Оператор Is – сравнение ссылок на объекты
Оператор Is предназначен для сравнения двух переменных со ссылками на объекты.
Синтаксис:
Результат = Объект1 Is Объект2 |
- Результат – любая числовая переменная;
- Объект – переменная со ссылкой на любой объект.
Если обе переменные Объект1 и Объект2 ссылаются на один и тот же объект, Результат примет значение True. В противном случае результатом будет False.
Set myObj1 = ThisWorkbook Set myObj2 = Sheets(1) Set myObj3 = myObj1 Set myObj4 = Sheets(1) myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True myRes = myObj2 Is myObj4 ‘myRes = True |
По-другому ведут себя ссылки на диапазоны ячеек. При присвоении ссылок на один и тот же диапазон нескольким переменным, в памяти создаются уникальные записи для каждой переменной.
Set myObj1 = Range(«A1:D4») Set myObj2 = Range(«A1:D4») Set myObj3 = myObj1 myRes = myObj1 Is myObj2 ‘myRes = False myRes = myObj1 Is myObj3 ‘myRes = True |
Оператор Like – сравнение строк по шаблону
Оператор Like предназначен для сравнения одной строки с другой по шаблону.
Синтаксис:
Результат = Выражение Like Шаблон |
- Результат – любая числовая переменная;
- Выражение – любое выражение, возвращающее строку;
- Шаблон – любое строковое выражение, которое может содержать знаки подстановки.
Строка, возвращенная аргументом Выражение, сравнивается со строкой, возвращенной аргументом Шаблон. Если обе строки совпадают, переменной Результат присваивается значение True, иначе – False.
myRes = «восемь» Like «семь» ‘myRes = False myRes = «восемь» Like «*семь» ‘myRes = True myRes = «Куда идет король» Like «идет» ‘myRes = False myRes = «Куда идет король» Like «*идет*» ‘myRes = True |
Со знаками подстановки для оператора Like вы можете ознакомиться в статье Знаки подстановки для шаблонов.
VBA in Excel stands for Visual Basic for Applications which is Microsoft’s programming language. To optimize the performance and reduce the time in Excel we need Macros and VBA is the tool used in the backend.
Some helpful links to get more insights about Macros, VBA in Excel :
1. Record Macros in Excel.
2. How to Create a Macro in Excel?
In this article, we are going to discuss various comparison operators in Excel VBA.
Implementation :
In the Microsoft Excel tabs, select the Developer Tab. Initially, the Developer Tab may not be available.
The Developer Tab can be enabled easily by a two-step process :
- Right-click on any of the existing tabs in the top of the Excel window.
- Now select Customize the Ribbon from the pop-down menu.
- The Excel Options Box, check the box Developer to enable it and click on OK.
- Now, the Developer Tab is visible.
- Now click on the Visual Basic option in the Developer tab and make a new module to write the program.
Developer -> Visual Basic -> Tools -> Macros
Now create a Macro and give any suitable name.
This will open the Editor window where can write the code.
Comparison Operators in Excel:
S.No. | Operators |
Definition |
---|---|---|
1 | <> |
Not equal operator is used to compare two operands. If the two operands are not equal it returns TRUE else it returns FALSE. For example : A=10, B= 20 The condition will be TRUE for A <> B, since A and B are not equal. |
2 | = |
Equal operator is used to compare two operands. If the two operands are equal it returns TRUE else it returns FALSE. For example : A=20, B= 20 The condition will be TRUE for A = B, since A and B are equal. |
3 | > |
Greater than operator checks whether the operand on the left hand side is strictly greater than the operand on RHS. If greater then it returns TRUE else FALSE. For example : A=10, B= 5 The condition will be TRUE for A > B, since A is greater than B. |
4 | < |
Less than operator checks whether the operand on the left hand side is strictly less than the operand on RHS. If greater then it returns TRUE else FALSE. For example : A=10, B= 5 The condition will be FALSE for A < B, since A is greater than B. |
5 | >= |
Greater than equal to operator checks whether the operand on the left hand side is either greater or equal to the operand on RHS. If greater or equal then it returns TRUE else FALSE. For example : A=10, B=10 The condition will be TRUE for A >= B, since A is equal to B. |
6 | <= |
Less than equal to operator checks whether the operand on the left hand side is either lesser or equal to the operand on RHS. If lesser or equal then it returns TRUE else FALSE. For example : A=5, B=10 The condition will be TRUE for A <= B, since A is less than B. |
The comparison operators are mostly used with the If Else Then statement in Excel because comparison operators return TRUE if the condition is met and FALSE if not.
The syntax of If Else in Excel is :
If condition/expression Then Code Block for True Else Code Block for False End If
Let’s take an example where values of A=-1 and B=-5 and see the code in Excel VBA for all the comparison operators.
1. Equal To and Not Equal To
Sub Comparison_Operator_Demo() 'Entering the numbers Dim A As Integer: A = -1 Dim B As Integer: B = -5 'Condition for Equal To If A = B Then MsgBox " A and B are equal" Else MsgBox " A and B are not equal" End If End Sub
In the above code, If the condition becomes FALSE since A and B values are not the same. So the code block inside Else will be executed.
Sub Comparison_Operator_Demo() 'Entering the numbers Dim A As Integer: A = -1 Dim B As Integer: B = -5 'Condition for Not Equal To If A <> B Then MsgBox " True since A and B are not same" Else MsgBox " False since A and B are same" End If End Sub
In the above code If the condition becomes TRUE since A and B are not same. So the code block inside If will be executed.
2. Greater than or Less than operator :
Sub Comparison_Operator_Demo() 'Entering the numbers Dim A As Integer: A = -1 Dim B As Integer: B = -5 'Condition for Greater Than If A > B Then MsgBox " A is greater than B" Else MsgBox " A is not greater than B" End If End Sub
In the above code If the condition becomes TRUE since A is greater than B. So the code block inside If will be executed.
Sub Comparison_Operator_Demo() 'Entering the numbers Dim A As Integer: A = -1 Dim B As Integer: B = -5 'Condition for Less Than If A < B Then MsgBox "True because A is less than B" Else MsgBox "False because A is greater than B" End If End Sub
In the above code If the condition becomes FALSE since A is greater than B. So the code block inside Else will be executed.
Similarly, you can do for Greater than equal to and Less than equal to operators.
замечания
Операторы оцениваются в следующем порядке:
- Математические операторы
- Побитовые операторы
- Операторы конкатенации
- Операторы сравнения
- Логические операторы
Операторы с совпадающим приоритетом оцениваются слева направо. Порядок по умолчанию можно переопределить, используя круглые скобки (
и )
для группировки выражений.
Математические операторы
Перечислено в порядке очередности:
знак | название | Описание |
---|---|---|
^ |
Возведение | Верните результат подъема левого операнда в силу правого операнда. Обратите внимание, что значение, возвращаемое экспоненциацией, всегда равно Double , независимо от того, какие типы значений делятся. Любое принуждение результата к переменному типу происходит после выполнения вычисления. |
/ |
Раздел 1 | Возвращает результат деления левого операнда на правый операнд. Обратите внимание, что значение, возвращаемое делением, всегда равно Double , независимо от того, какие типы значений делятся. Любое принуждение результата к переменному типу происходит после выполнения вычисления. |
* |
Умножение 1 | Возвращает произведение двух операндов. |
|
Целостный отдел | Возвращает целочисленный результат деления левого операнда правым операндом после округления обеих сторон с округлением .5. Любое остальное подразделение игнорируется. Если правый операнд (делитель) равен 0 , это приведет к ошибке времени выполнения 11: деление на ноль. Обратите внимание, что это происходит после округления — выражения, такие как 3 0.4 , также приводят к делению на нулевую ошибку. |
Mod |
Модульное | Возвращает целочисленный остаток деления левого операнда на правый операнд. Операнд с каждой стороны округляется до целого числа до деления с округлением .5. Например, и 8.6 Mod 3 и 12 Mod 2.6 приводят к 0 . Если правый операнд (делитель) равен 0 , это приведет к ошибке времени выполнения 11: деление на ноль. Обратите внимание, что это выполняется после округления — выражения, такие как 3 Mod 0.4 , также приводят к делению на нулевую ошибку. |
- |
Вычитание 2 | Возвращает результат вычитания правого операнда из левого операнда. |
+ |
Добавление 2 | Возвращает сумму из двух операндов. Обратите внимание, что этот токен также рассматривается как оператор конкатенации, когда он применяется к String . См. Операторы конкатенации . |
1 Умножение и деление рассматриваются как имеющие тот же приоритет.
2 Сложение и вычитание рассматриваются как имеющие тот же приоритет.
Операторы конкатенации
VBA поддерживает 2 разных оператора конкатенации +
и &
и выполняет одну и ту же функцию при использовании со String
типами — правая String
добавляется к концу левой String
.
Если оператор &
используется с переменным типом, отличным от String
, он неявно передается в String
перед конкатенацией.
Обратите внимание, что оператор +
конкатенации является перегрузкой оператора +
сложения. Поведение +
определяется переменными типами операндов и приоритетом типов операторов. Если оба операнда напечатаны как String
или Variant
с Variant
String
, они объединяются:
Public Sub Example()
Dim left As String
Dim right As String
left = "5"
right = "5"
Debug.Print left + right 'Prints "55"
End Sub
Если какая- либо сторона является числовым типом, а другая сторона является String
которая может быть принудительно введена в число, приоритет типа математических операторов заставляет оператора обрабатываться как оператор сложения и добавляются числовые значения:
Public Sub Example()
Dim left As Variant
Dim right As String
left = 5
right = "5"
Debug.Print left + right 'Prints 10
End Sub
Такое поведение может привести к тонким, трудно отлаживающим ошибкам, особенно если используются типы Variant
, поэтому для конкатенации обычно следует использовать оператор &
.
Операторы сравнения
знак | название | Описание |
---|---|---|
= |
Равно | Возвращает True если левый и правый операнды равны. Обратите внимание, что это перегрузка оператора присваивания. |
<> |
Не равен | Возвращает True если левый и правый операнды не равны. |
> |
Лучше чем | Возвращает True если левый операнд больше правого операнда. |
< |
Меньше, чем | Возвращает True если левый операнд меньше правого операнда. |
>= |
Больше или равно | Возвращает True если если левый операнд больше или равен правому операнду. |
<= |
Меньше или равно | Возвращает True если левый операнд меньше или равен правому операнду. |
Is |
Справочный капитал | Возвращает значение True если ссылка на левый объект — это тот же экземпляр, что и ссылка на правый объект. Он также может использоваться с Nothing (ссылка на нулевой объект) с обеих сторон. Примечание. Оператор Is попытается принудить оба операнда к Object перед выполнением сравнения. Если какая-либо сторона является примитивным типом или Variant , который не содержит объект (либо не-объектный подтип, либо vtEmpty ), сравнение приведет к ошибке времени выполнения 424 — «Требуется объект». Если любой операнд принадлежит другому интерфейсу одного и того же объекта, сравнение вернет True . Если вам нужно проверить справедливость как экземпляра, так и интерфейса, ObjPtr(left) = ObjPtr(right) используйте ObjPtr(left) = ObjPtr(right) . |
Заметки
Синтаксис VBA позволяет «цепочки» операторов сравнения, но в целом эти конструкции следует избегать. Сравнение всегда выполняется слева направо только на 2 операндах за раз, и каждое сравнение приводит к Boolean
. Например, выражение …
a = 2: b = 1: c = 0
expr = a > b > c
… может быть прочитан в некоторых контекстах как проверка того, является ли b
между a
и c
. В VBA это оценивается следующим образом:
a = 2: b = 1: c = 0
expr = a > b > c
expr = (2 > 1) > 0
expr = True > 0
expr = -1 > 0 'CInt(True) = -1
expr = False
Любой оператор сравнения, кроме Is
использоваться с Object
в качестве операнда будет выполняться на возвращаемом значении Object
«s члена по умолчанию . Если объект не имеет члена по умолчанию, сравнение приведет к ошибке времени выполнения 438 — «Объект не поддерживает его свойство или метод».
Если Object
не инициализирован, сравнение приведет к ошибке времени выполнения 91 — «Объектная переменная или С заблокированной переменной блока».
Если литерал Nothing
используется с любым оператором сравнения, отличным от Is
, это приведет к ошибке компиляции — «Недопустимое использование объекта».
Если Object
по умолчанию Object
является другой Object
, VBA будет постоянно вызывать элемент по умолчанию каждого последующего возвращаемого значения до тех пор, пока не будет возвращен примитивный тип или не будет поднята ошибка. Например, предположим, что у SomeClass
есть член по умолчанию Value
, который является экземпляром ChildClass
с членом ChildValue
по ChildValue
. Сравнение…
Set x = New SomeClass
Debug.Print x > 42
… будет оцениваться как:
Set x = New SomeClass
Debug.Print x.Value.ChildValue > 42
Если либо операнд является числовым, а другой операндом является String
или Variant
подтипа String
, будет выполнено числовое сравнение. В этом случае, если String
не может быть отнесено к числу, результатом сравнения будет ошибка времени выполнения 13 — «Несоответствие типа».
Если оба операнда представляют собой String
или Variant
подтипа String
, сравнение строк будет выполняться на основе параметра сравнения параметров модуля кода. Эти сравнения выполняются по характеру по характеру. Обратите внимание, что символьное представление String
содержащей число, не совпадает с сопоставлением числовых значений:
Public Sub Example()
Dim left As Variant
Dim right As Variant
left = "42"
right = "5"
Debug.Print left > right 'Prints False
Debug.Print Val(left) > Val(right) 'Prints True
End Sub
По этой причине убедитесь, что переменные String
или Variant
передаются в числа перед выполнением численных сравнений неравенства.
Если один из операндов — это Date
, то числовое сравнение по базовому двойному значению будет выполняться, если другой операнд является числовым или может быть преобразован в числовой тип.
Если другой операнд представляет собой String
или Variant
подтипа String
который может быть перенесен в Date
с использованием текущего языкового стандарта, String
будет передана в Date
. Если он не может быть применен к Date
в текущей локали, результатом сравнения будет ошибка времени выполнения 13 — «Несоответствие типа».
Следует соблюдать осторожность при сравнении значений Double
или Single
и Booleans . В отличие от других числовых типов ненулевые значения нельзя считать True
из-за поведения VBA в продвижении типа данных сравнения с использованием числа с плавающей точкой в Double
:
Public Sub Example()
Dim Test As Double
Test = 42 Debug.Print CBool(Test) 'Prints True.
'True is promoted to Double - Test is not cast to Boolean
Debug.Print Test = True 'Prints False
'With explicit casts:
Debug.Print CBool(Test) = True 'Prints True
Debug.Print CDbl(-1) = CDbl(True) 'Prints True
End Sub
Побитовые Логические операторы
Все логические операторы в VBA можно рассматривать как «переопределения» побитовых операторов с тем же именем. Технически они всегда рассматриваются как побитовые операторы. Все операторы сравнения в VBA возвращают логическое значение , которое всегда не будет содержать ни одного из его битов ( False
) или всех его битов ( True
). Но он будет обрабатывать значение с любым битом, установленным как True
. Это означает, что результат приведения побитового результата выражения в Boolean
(см. Операторы сравнения) всегда будет таким же, как рассматривать его как логическое выражение.
Присвоение результата выражения с использованием одного из этих операторов даст побитовый результат. Обратите внимание, что в таблицах истинности ниже 0
эквивалентно False
и 1
эквивалентно True
.
And
Возвращает True
если выражения с обеих сторон оцениваются как True
.
Левый Операнд | Правый операнд | Результат |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Or
Возвращает значение True
если любая из сторон выражения имеет значение True
.
Левый Операнд | Правый операнд | Результат |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Not
Возвращает True
если выражение оценивается как False
и False
если выражение оценивается как True
.
Правый операнд | Результат |
---|---|
0 | 1 |
1 | 0 |
Not
единственный операнд без левого операнда. Редактор Visual Basic автоматически упростит выражения с помощью аргумента левой руки. Если вы наберете …
Debug.Print x Not y
… VBE изменит линию на:
Debug.Print Not x
Аналогичные упрощения будут сделаны для любого выражения, содержащего левый операнд (включая выражения) для Not
.
Xor
Также известен как «эксклюзивный» или «эксклюзивный». Возвращает значение True
если оба выражения оцениваются по разным результатам.
Левый Операнд | Правый операнд | Результат |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Заметим, что хотя оператор Xor
можно использовать как логический оператор, нет абсолютно никаких оснований для этого, поскольку он дает тот же результат, что и оператор сравнения <>
.
Eqv
Также известен как «эквивалентность». Возвращает True
когда оба выражения оцениваются с одним и тем же результатом.
Левый Операнд | Правый операнд | Результат |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Обратите внимание, что функция Eqv
очень редко используется, поскольку x Eqv y
эквивалентно гораздо более читаемому Not (x Xor y)
.
Imp
Также известен как «импликация». Возвращает True
если оба операнда одинаковы или второй операнд имеет значение True
.
Левый Операнд | Правый операнд | Результат |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
Обратите внимание, что функция Imp
очень редко используется. Хорошим правилом является то, что если вы не можете объяснить, что это значит, вы должны использовать другую конструкцию.
These are operators that are used to compare values. Comparison operators include equal to, less than, greater than and not equal to
Comparison operators are used to compare values for validation purposes. Let’s say you are developing a simple point of sale application. In this application, you want to validate the values entered before you post. In such cases, you can use comparison operators. This operator will check against the negative numbers or to ensure that the amount paid does not exceed the billed amount. Comparison operators come in handy in such situations.
The following table lists the comparison operators defined in VBA.
Operator | Description |
---|---|
= | Equal: checks if two values are equal. It is also used as an assignment operator |
< | Less than: This operator is used to subtract numbers |
> | Greater than: This operator is used to multiply numbers |
<> | Not equal to: This operator is used to divide numbers |
<= | Less than or equal to: |
>= | Greater than or equal to: |
VBA Comparison Operators with Example
The following table shows Excel VBA Comparison Operators with examples and output.
S/N | Operator | Example | Output |
---|---|---|---|
1 | = | If x = z Then | Returns true if they are equal, else it returns false |
2 | < | If x < z Then | Returns true if x is less than z, else it returns false |
3 | > | If x > z Then | Returns true if x is greater than z, else it returns false |
4 | <> | If x <> z Then | Returns true if they are not equal, else it returns false |
5 | <= | If x <= z Then | Returns true if x is less than or equal to z, else it returns false |
6 | >= | If x >= Then | Returns true if x is greater than or equal to z, else it returns false |
Example source code
Equal Comparison Operator
If 2 = 1 Then MsgBox "True", vbOKOnly, "Equal Operator" Else MsgBox "False", vbOKOnly, "Equal Operator" End If
HERE,
- “If 2 = 1 Then… Else… End If” uses the if statement to evaluate the condition “2 = 1”
- “MsgBox…” Is a built-in function that displays a message box.
- The first parameter “True” or “False” is what will be displayed in the message box. In our example, 2 is not equal to 1, therefore, it will show “false” in the msg box.
- The second parameter “vbOKOnly” is the button that is displayed in the message box
- The third parameter “Equal Operator” is the title of the message box.
Executing the above code gives the following results
Download the above Excel Code
Содержание
- Операторы сравнения
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- Операторы сравнения VBA — не равно и не только
- Список основных операторов сравнения в VBA
- Больше или равно
- Меньше, чем
- Comparison Operators in Visual Basic
- Сравнение числовых значений
- Сравнение строк
- Сравнение объектов
- Сравнение типа объекта
Операторы сравнения
Используется для сравнения выражений.
Синтаксис
Результат = expression1comparisonoperatorexpression2result = object1Isobject2result = stringLikepattern
Операторы сравнения состоят из следующих частей:
Part | Описание |
---|---|
result | Обязательный элемент; любая числовая переменная. |
выражение | Обязательный элемент; любое выражение. |
comparisonoperator | Обязательный элемент; любой оператор сравнения. |
object | Обязательный; любое имя объекта. |
строка | Обязательный элемент; любое строковое выражение. |
pattern | Обязательный элемент; любое строковое выражение или диапазон символов. |
Замечания
Следующая таблица содержит список операторов сравнения и условий, определяющих, имеет ли результатзначение True, False или Null.
Оператор | True, если | False, если | Null, если | ||||
---|---|---|---|---|---|---|---|
(Меньше) | expression1 = expression2 | expression1 или expression2 = NULL | |||||
(Меньше или равно) | expression1 expression2 | expression1 или expression2 = NULL | |||||
> (Больше) | expression1>expression2 | expression1 >= (Больше или равно) | expression1> = expression2 | expression1 = (Равно) | expression1 = expression2 | expression1<>expression2 | expression1 или expression2 = NULL |
<> (Не равно) | expression1<>expression2 | expression1 = expression2 | expression1 или expression2 = NULL |
Операторы Is и Like обладают особыми возможностями сравнения, которые отличаются от возможностей операторов, приведенных в таблице.
При сравнении двух выражений, возможно, будет нелегко определить, сравниваются ли выражения как числа или как строки. В следующей таблице показано, как сравниваются выражения или результат, если любое из выражений не является Variant.
Если | Then |
---|---|
Оба выражения представляют собой числовые типы данных (Byte, Boolean, Integer, Long, Single, Double, Date, Currency или Decimal) | Выполните числовое сравнение. |
Оба выражения имеют тип String | Выполняется сравнение строк. |
Одно выражение является числовым типом данных, а другое — типом Variant, который равен числу или может им быть | Выполните числовое сравнение. |
Одно выражение является числовым типом данных, а другое — строкой Variant, которая не может быть преобразована в число | Возникает Type Mismatch ошибка. |
Одно выражение — String, а другое — любое значение Variant за исключением Null | Выполните строковое сравнение. |
Одно выражение — Empty, а другое является числовым типом данных | Выполните числовое сравнение, используя 0 в качестве выражения Empty. |
Одно выражение — Empty, а другое — String | Выполните строковое сравнение, используя строку нулевой длины («») в качестве выражения Empty. |
Если оба выражения expression1 и expression2 являются выражениями типа Variant, порядок их сравнения определяется их базовым типом. В следующей таблице показано, как сравниваются выражения или результат сравнения в зависимости от базового типа Variant.
Если | Then |
---|---|
Оба выражения Variant являются числовыми | Выполните числовое сравнение. |
Оба выражения Variant являются строками | Выполните строковое сравнение. |
Одно выражение Variant числовое, а другое строка | Числовое выражение меньше, чем строковое выражение. |
Одно выражение Variant — Empty, а другое — числовое | Выполните числовое сравнение, используя 0 в качестве выражения Empty. |
Одно выражение Variant — Empty, а другое — строка | Выполните строковое сравнение, используя строку нулевой длины («») в качестве выражения Empty. |
Оба выражения Variant — Empty | Выражения равны. |
Когда переменная Single сравнивается с переменной Double, значение Double округляется до точности типа Single. Если переменная Currency сравнивается с переменной Single или Double, значение Single или Double преобразуется в тип Currency.
Аналогично, когда переменная Decimal сравнивается с переменной Single или Double, значение Single или Double преобразуется в тип Decimal. Для типа Currency любое дробное значение менее чем 0,0001 может быть потеряно; для типа Decimal любое дробное значение менее чем 1E-28 может быть потеряно, или возможно возникновение ошибки переполнения. Потеря такого дробного значения может привести к тому, что два сравниваемых значения будут равны, когда на самом деле они не равны.
Пример
В этом примере показаны различные варианты использования операторов сравнения, которые применяются для сравнения выражений.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Операторы сравнения VBA — не равно и не только
VBA позволяет использовать операторы сравнения для сравнения значений. Используя эти операторы, вы можете сравнивать значения и в результате возвращать логическое значение True или False.
Список основных операторов сравнения в VBA
Сначала мы отобразим список операторов сравнения, которые можно использовать в коде VBA:
Оператор сравнения
Больше или равно
intB ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, если
В этом примере мы хотим проверить, intA больше, чем intB. Если это правда, значение Boolean blnResult будет True, в противном случае — False.
Кроме того, мы используем > в операторе If, чтобы проверить, имеет ли значение intA больше, чем intB:
12345 | Если intA> intB ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, если |
В заключение, посколькуintA больше, чем intB, то blnResult возвращает True:
Изображение 3. Использование оператора «Больше, чем»
Больше или равно
В Больше или равно Оператор проверяет, больше ли первое значение второму или равно ему, и возвращает True или False. Вот пример кода:
123456789101112 | Dim intA как целое числоDim intB как целое числоDim blnResult As BooleanintA = 5intB = 5Если intA> = intB ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, если |
В этом примере мы хотим проверить, intA Больше или равно intB. Если это правда, значение Boolean blnResult будет True, в противном случае — False.
Мы используем>= в операторе If, чтобы проверить, имеет ли значение intA Больше или равно intB:
12345 | Если intA> = intB ТогдаblnResult = TrueЕщеblnResult = ЛожьКонец, если |
В заключение, поскольку обе переменные равны 5, blnResult возвращает True:
Изображение 4. Использование оператора «Больше или равно»
Меньше, чем
В Меньше, чем Оператор проверяет, меньше ли первое значение второго и возвращает True или False. Вот пример кода:
Источник
Comparison Operators in Visual Basic
Операторы сравнения сравнивают два выражения и возвращают Boolean значение, представляющее связь их значений. Существуют операторы для сравнения числовых значений, операторы для сравнения строк и операторы для сравнения объектов. Здесь рассматриваются все три типа операторов.
Сравнение числовых значений
Visual Basic сравнивает числовые значения с помощью шести операторов числового сравнения. Каждый оператор принимает в качестве операндов два выражения, которые вычисляют числовые значения. В следующей таблице перечислены операторы и приведены примеры каждого из них.
Оператор | Условие протестировано | Примеры |
---|---|---|
= (Равенство) | Равно ли значение первого выражения значению второго? | 23 = 33 ‘ False
23 = 12 ‘ False |
<> (Неравенство) | Не соответствует ли значение первого выражения значению второго? | 23 <> 33 ‘ True
23 <> 12 ‘ True |
(Меньше) | Значение первого выражения меньше значения второго? | 23 33 ‘ True
23 12 ‘ False |
> (Больше) | Является ли значение первого выражения больше значения второго? | 23 > 33 ‘ False
23 > 12 ‘ True |
(Меньше или равно) | Является ли значение первого выражения меньше или равно значению второго? | 23 33 ‘ True
23 12 ‘ False |
>= (Больше или равно) | Является ли значение первого выражения больше или равно значению второго? | 23 >= 33 ‘ False
23 >= 12 ‘ True |
Сравнение строк
Visual Basic сравнивает строки с помощью оператора Like , а также числовых операторов сравнения. Оператор Like позволяет указать шаблон. Затем строка сравнивается с шаблоном, и если она совпадает, результатом будет True . В противном случае результат будет False . Числовые операторы позволяют сравнивать String значения на основе порядка сортировки, как показано в следующем примере.
‘ The result of the preceding comparison is True.
Результатом в предыдущем примере является True то, что первый символ в первой строке сортируется перед первым символом во второй строке. Если первые символы равны, сравнение продолжится до следующего символа в обеих строках и т. д. Вы также можете проверить равенство строк с помощью оператора равенства, как показано в следующем примере.
‘ The result of the preceding comparison is True.
Если одна строка является префиксом другой, например «aa» и «aaa», длинная строка считается больше, чем более короткая строка. Это показано в следующем примере.
‘ The result of the preceding comparison is True.
Порядок сортировки основан на двоичном или текстовом сравнении в зависимости от параметра Option Compare . Дополнительные сведения см. в разделе Оператор Сравнения вариантов.
Сравнение объектов
Visual Basic сравнивает две ссылочные переменные объекта с оператором Is и Оператором IsNot. Можно использовать любой из этих операторов, чтобы определить, ссылаются ли две ссылочные переменные на один и тот же экземпляр объекта. Это показано в следующем примере.
В предыдущем примере x Is y принимает значение True , так как обе переменные ссылаются на один и тот же экземпляр . Сравните этот результат с приведенным ниже примером.
В предыдущем примере x Is y вычисляется False как , так как переменные ссылаются на объекты одного типа, они ссылаются на разные экземпляры этого типа.
Если вы хотите проверить наличие двух объектов, не указывающих на один и тот же экземпляр, IsNot оператор позволяет избежать грамматического неуклюжего сочетания Not и Is . Это показано в следующем примере.
В предыдущем примере If a IsNot b эквивалентно If Not a Is b .
Сравнение типа объекта
С помощью выражения . Is можно проверить, имеет ли объект определенный тип TypeOf . Синтаксис выглядит следующим образом:
Если typename указывает тип интерфейса, выражение . Is возвращает значение True , TypeOf если объект реализует тип интерфейса. Если typename является типом класса, выражение возвращает True значение , если объект является экземпляром указанного класса или класса, производного от указанного класса. Это показано в следующем примере.
В предыдущем примере выражение принимает значение , TypeOf x Is Control так как тип x — Button , который наследуется от Control . True
Дополнительные сведения см. в разделе Оператор TypeOf.
Источник