Операторы сравнения чисел и строк, ссылок на объекты (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 вы можете ознакомиться в статье Знаки подстановки для шаблонов.
Vadim_EC Пользователь Сообщений: 9 |
#1 14.11.2015 12:51:00 Доброго времени суток.
не получилось. Код VBA 13-я строка:
Изменено: Vadim_EC — 14.11.2015 12:53:02 |
||||
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#2 14.11.2015 12:56:50
и/или
<#0> |
||||
МВТ Пользователь Сообщений: 1198 |
#3 14.11.2015 13:00:49 А откуда у Вас должна ошибка взяться при присвоении текстовой переменной значения другой текстовой переменной
В крайнем случае, результатом будет пустая строка. Попробуйте так
|
||||
The_Prist Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
С виду код рабочий. Вероятно строки реально не равны. Проверьте, записав значения каждой строки в ячейку. Скорее всего где-то лишний пробел или другие символы отличаются. Например где-то «а» русская, а где-то английская. С виду одинаковые, а на деле отличаются. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
МВТ Пользователь Сообщений: 1198 |
#5 14.11.2015 13:05:16 Насчет ошибки был неправ, понял, что не во всех ячейках есть комменты. Тогда проверять
|
||
Vadim_EC Пользователь Сообщений: 9 |
#6 14.11.2015 13:26:34 Спасибо большое!
и
Просто значение комментария было с новой строкой, а в ячейке было только значение текста. Изменено: Vadim_EC — 14.11.2015 13:34:40 |
||||
Хитрости »
12 Апрель 2015 30604 просмотров
Сравнение текста по части предложения
Довольно часто возникает проблема сравнения двух строк(ячеек) по части текста. Если точнее — по совпадению слов. Чем больше слов в двух строках совпадает — тем больше они считаются похожими. Так, к примеру текст «Защитная пленка iPhone» и текст «Защитная пленка для Samsung GalaxyII» совпадут только на 40%, а «шла маша по шоссе» и «маша по шоссе шла» — на 100%.
Я не имею ввиду сейчас случаи вроде двух строк: «привет» и «превет». Для подобного сравнения можно написать решения различные, но скорость их выполнения как правило оставляет желать лучшего, да и точность такого сравнения тоже не на высоте, если не использовать всевозможные справочники
На деле подобная задача встречается достаточно часто и предположу, что данная статья может быть полезна очень многим. Итак, как ни жаль, но подобную задачу невозможно решить без применения Visual Basic for Applications(VBA). Решение, которое я предложу — функция пользователя. Поэтому прежде чем его использовать настоятельно рекомендую прочесть следующие статьи:
- Что такое функция пользователя(UDF)? — обязательно
- Почему не работает макрос? — обязательно
- Что такое макрос и где его искать? — не помешает
- Что такое модуль? Какие бывают модули? — не помешает
Собственно сам код функции:
Option Explicit Option Compare Text '--------------------------------------------------------------------------------------- ' Procedure : CompareTxt ' DateTime : 10.03.2015 22:46 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : Сравнивает две строки по совпадению отдельных слов. Выводит процент, саму строку и номер строки ' s1 - исходный текст(ссылка на ячейку или текст) ' mass - диапазон значений для сравнения с исходным текстом(ссылка на ячейку или текст) ' sDelim - разделитель слов в тексте. По умолчанию пробел ' lFstLast - указатель, выводить первое или последнее подходящее совпадение. ' По умолчанию 0(последнее максимально совпадающее). ' Если указать 1 - будет выбрано первое подходящее(в котором совпадают все слова) ' lShowAllInfo - указатель на результат. Допускается четыре значения: ' -1 - показывается вся информация: Процент совпадения строк, Найденное значение, ' Номер строки в указанном диапазоне в которой найдено значение ' 1 - Выводится только процент совпадения строк ' 2 - выводится только значение ' 3 - выводится только номер строки с найденным значением ' По умолчанию применяется -1(вся информация) ' Синтаксис: ' =CompareTxt(A1;B1:B100) - с разделителем по умолчанию ' =CompareTxt(A1;B1:B100;"-") - с разделителем короткое тире(-) ' =CompareTxt(A1;B1:B100;"-";;2) - с разделителем короткое тире(-) и выводом только значения '--------------------------------------------------------------------------------------- Function CompareTxt(s1 As String, mass As Range, Optional sDelim As String = " ", Optional lFstLast As Long = 0, Optional lShowAllInfo As Long = -1) Dim as1, as2, l1 As Long, l2 As Long, lr As Long Dim asStr2 Dim s As String, s2 As String, lp, lTmpCom As Long, lResCom As Long Dim lResR As Long, sResS As String, v as1 = Split(s1, sDelim) asStr2 = mass.Value If Not IsArray(asStr2) Then ReDim asStr2(1 To 1, 1 To 1): asStr2(1, 1) = mass.Value For lr = 1 To UBound(asStr2, 1) as2 = Split(asStr2(lr, 1), sDelim) lResCom = 0 For l1 = LBound(as1) To UBound(as1) s = as1(l1) For l2 = LBound(as2) To UBound(as2) If as2(l2) = s Then lResCom = lResCom + 1 Exit For End If Next l2 Next l1 If lTmpCom < lResCom Then lTmpCom = lResCom lResR = lr sResS = asStr2(lr, 1) lp = lp + 1 End If If lFstLast Then If lTmpCom >= (UBound(as1) + 1) Then Exit For End If End If Next lr v = (lTmpCom / (UBound(as1) + 1)) * 100 Select Case lShowAllInfo Case -1 CompareTxt = "Процент совпадения: " & v & "; Значение: " & sResS & "; Строка в массиве mass: " & lResR Case 1 'только процент CompareTxt = v Case 2 'только значение строки CompareTxt = sResS Case 3 'только номер строки CompareTxt = lResR End Select End Function
Данный код необходимо вставить в стандартный модуль книги(выше я привел ссылки на статьи, чтобы более точно понять куда и как вставить). Функция ищет указанное значение(s1) в массиве значений(mass) и выводит максимально подходящее значение. Максимально подходящее, естественно, полное совпадение — то, которое совпадает на 100%. Если же полного совпадения среди значений массива(mass) не будет найдено, то будет выведено значение с максимальным процентом совпадения. В таких случаях всегда можно указать последним аргументом(lShowAllInfo) -1 или 3, чтобы посмотреть номер строки в указанном диапазоне(mass) и сверить уже глазами подходит это значение или нет.
Синтаксис:
=CompareTxt(A1;B1:B100) — с разделителем по умолчанию
=CompareTxt(A1;B1:B100;»-«) — с разделителем короткое тире(-)
=CompareTxt(A1;B1:B100;»-«;;2) — с разделителем короткое тире(-) и выводом только значения
Аргументы:
s1 — исходный текст(ссылка на ячейку или текст)
mass — диапазон значений для сравнения с исходным текстом(ссылка на ячейку или текст)
sDelim — разделитель слов в тексте. По умолчанию пробел.
lFstLast — указатель, выводить первое или последнее подходящее совпадение. По умолчанию 0(последнее максимально совпадающее). Если указать 1 — будет выбрано первое подходящее(в котором совпадают все слова)
lShowAllInfo — указатель на результат. Допускается четыре значения:
- -1 — показывается вся информация: Процент совпадения строк, Найденное значение, номер строки в указанном диапазоне в которой найдено значение
- 1 — Выводится только процент совпадения строк
- 2 — выводится только значение
- 3 — выводится только номер строки с найденным значением. По умолчанию применяется -1(вся информация)
Ниже функция в файле с примерами использования:
Tips_Macro_ComparePart.xls (50,5 KiB, 3 594 скачиваний)
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Содержание
- Заявление VBA If
- ElseIF — несколько условий
- Еще
- Если еще
- Вложенные IF
- ЕСЛИ — Или, И, Xor, Не
- Если сравнения
- Если петли
- Если остальные примеры
- VBA If, ElseIf, Else в Access VBA
Если то
Операторы If в VBA позволяют проверять, являются ли выражения ИСТИННЫМИ или ЛОЖНЫМИ, выполняя другой код в зависимости от результатов.Давайте посмотрим на простой пример:
1 | Если Range («a2»). Value> 0, то Range («b2»). Value = «Positive» |
Это проверяет, больше ли значение в диапазоне A2, чем 0. Если да, установите для диапазона B2 значение «Положительный».Примечание: при тестировании условий мы будем использовать операторы сравнения =,>, <,, =. Подробнее о них мы поговорим позже в статье.Вот синтаксис простого однострочного оператора If:
1 | Если [test_expression], то [действие] |
Чтобы упростить чтение, вы можете использовать символ продолжения строки (подчеркивание), чтобы расширить операторы If до двух строк (как мы это сделали на рисунке выше):
12 | Если [test_expression], то _[действие] |
12 | Если Range («a2»). Value> 0 Then _Диапазон («b2»). Значение = «Положительное» |
Конец, если
Приведенный выше «однострочный» оператор if хорошо работает, когда вы проверяете одно условие. Но по мере того, как ваши операторы IF усложняются с несколькими условиями, вам нужно будет добавить «End If» в конец оператора if:
123 | Если Range («a2»). Value> 0, тоДиапазон («b2»). Значение = «Положительное»Конец, если |
Вот синтаксис:
123 | Если [test_expression], то[действие]Конец, если |
End If означает конец оператора if.
Теперь давайте добавим ElseIF:
ElseIF — несколько условий
ElseIf добавляется к существующему оператору If. ElseIf проверяет выполнение условия ТОЛЬКО если предыдущие условия не были выполнены.В предыдущем примере мы проверили, положительное ли значение ячейки. Теперь мы также проверим, является ли значение ячейки отрицательным с помощью ElseIf:
12345 | Если Range («a2»). Value> 0, тоДиапазон («b2»). Значение = «Положительное»ElseIf Range («a2»). Значение <0 ТогдаДиапазон («b2»). Значение = «Отрицательное»Конец, если |
Вы можете использовать несколько ElseIf для проверки нескольких условий:
1234567891011 | Sub If_Multiple_Conditions ()Если Range («a2»). Value = «Cat», тоДиапазон («b2»). Значение = «Мяу»ElseIf Range («a2»). Value = «Dog» ТогдаДиапазон («b2»). Значение = «Гав»ElseIf Range («a2»). Value = «Duck» ТогдаДиапазон («b2»). Значение = «Кряк»Конец, еслиКонец подписки |
Теперь мы добавим Еще:
Еще
В Еще будет работать, если никакие другие предыдущие условия не были выполнены.
Мы закончим наш пример, используя Else, чтобы указать, что если значение ячейки не является положительным или отрицательным, то оно должно быть равно нулю:
1234567 | Если Range («a2»). Value> 0, тоДиапазон («b2»). Значение = «Положительное»ElseIf Range («a2»). Значение <0 ТогдаДиапазон («b2»). Значение = «Отрицательное»ЕщеДиапазон («b2»). Значение = «Ноль»Конец, если |
Если еще
Самый распространенный тип оператора If — это простой If-Else:
1234567 | Sub If_Else ()Если Range («a2»). Value> 0, тоДиапазон («b2»). Значение = «Положительное»ЕщеДиапазон («b2»). Значение = «Не положительное»Конец, еслиКонец подписки |
Вложенные IF
Вы также можете «вкладывать» операторы if друг в друга.
1234567891011 | Sub Nested_Ifs ()Если Range («a2»). Value> 0, тоДиапазон («b2»). Значение = «Положительное»ЕщеЕсли Range («a2»). Value <0 ThenДиапазон («b2»). Значение = «Отрицательное»ЕщеДиапазон («b2»). Значение = «Ноль»Конец, еслиКонец, еслиКонец подписки |
ЕСЛИ — Или, И, Xor, Не
Далее мы обсудим логические операторы: Or, And, Xor, Not.
Я для
В Или оператор проверяет, если как минимум одно условие выполнено.
Следующий код проверяет, является ли значение в диапазоне A2 меньше 5000 или больше 10000:
123 | Если Диапазон («a2»). Значение 10000 ТогдаДиапазон («b2»). Значение = «Вне диапазона»Конец, если |
Вы можете включить несколько Ор в одну строку:
123 | Если Диапазон («a2»). Значение 10000 Или Диапазон («a2»). Значение = 9999 ТогдаДиапазон («b2»). Значение = «Вне диапазона»Конец, если |
Если вы собираетесь использовать несколько OR, рекомендуется использовать символ продолжения строки, чтобы облегчить чтение кода:
123456 | Если Диапазон («a2»). Значение <5000 или _Диапазон («a2»). Значение> 10000 или _Диапазон («a2»). Значение = 9999 ТогдаДиапазон («b2»). Значение = «Вне диапазона»Конец, если |
Если и
Оператор And позволяет проверить, ВСЕ условия соблюдены.
123 | Если Range («a2»). Value> = 5000 And Range («a2»). Value <= 10000 ThenДиапазон («b2»). Значение = «В диапазоне»Конец, если |
Если Xor
Оператор Xor позволяет проверить, выполняется ровно одно условие. Если соблюдаются нулевые условия, Xor вернет FALSE, если два или более условий выполнены, Xor также вернет false.
Я редко видел, чтобы Xor использовался в программировании на VBA.
Если не
Оператор Not используется для преобразования FALSE в TRUE или TRUE в FALSE:
123 | Sub IF_Not ()MsgBox Not (True)Конец подписки |
Обратите внимание, что для переключения оператора Not требуется скобка, заключающая выражение.
Оператор Not также может применяться к операторам If:
123 | Если нет (Диапазон («a2»). Значение> = 5000 и диапазон («a2»). Значение <= 10000), тоДиапазон («b2»). Значение = «Вне диапазона»Конец, если |
Если сравнения
При сравнении обычно используется один из операторов сравнения:
Оператор сравнения | Объяснение |
---|---|
= | Равно |
Не равно | |
> | Больше чем |
>= | Больше или равно |
< | Меньше, чем |
<= | Меньше или равно |
Однако вы также можете использовать любое выражение или функция что приводит к ИСТИНА или ЛОЖЬ
Если — логическая функция
При построении выражений для операторов If вы также можете использовать любую функцию, которая генерирует TRUE или False. VBA имеет несколько из этих функций:
Функция | Описание |
---|---|
IsDate | Возвращает ИСТИНА, если выражение является допустимой датой. |
Пустой | Проверьте наличие пустых ячеек или неопределенных переменных |
IsError | Проверить значения ошибок |
Нулевой | Проверить значение NULL |
IsNumeric | Проверить числовое значение |
Их можно назвать так:
1 | Если IsEmpty (Range («A1»). Value), то MsgBox «Cell Empty» |
В Excel также есть много дополнительных функций, которые можно вызывать с помощью WorksheetFunction. Вот пример функции Excel IsText:
12 | Если Application.WorksheetFunction.IsText (Range («a2»). Value), то _MsgBox «Ячейка — это текст» |
Вы также можете создавать свои собственные определяемые пользователем функции (UDF). Ниже мы создадим простую логическую функцию, возвращающую ИСТИНА. Затем мы вызовем эту функцию в нашем операторе If:
1234567891011 | Sub If_Function ()Если TrueFunction, тоMsgBox «True»Конец, еслиКонец подпискиФункция TrueFunction () как логическое значениеTrueFunction = TrueКонечная функция |
Сравнение текста
Вы также можете сравнить текст, аналогично сравнению чисел:
Сравнивая текст, вы должны помнить о «регистре» (верхний или нижний). По умолчанию VBA считает буквы с разными регистрами несоответствующими. Другими словами, «А» «а».Если вы хотите, чтобы VBA игнорировал регистр, вы должны добавить объявление Option Compare Text в верхнюю часть модуля:
После этого объявления «А» = «а»:
12345 | Вариант Сравнить текстSub If_Text ()MsgBox «a» = «A»Конец подписки |
VBA, если нравится
Оператор Like VBA позволяет проводить неточные сравнения текста. Щелкните ссылку «Like Operator», чтобы узнать больше, но мы покажем базовый пример ниже:
12345678 | Dim strName as StringstrName = «Мистер Чарльз»Если strName Like «Mr *» ТогдаMsgBox «True»ЕщеMsgBox «False»Конец, если |
Здесь мы используем подстановочный знак звездочки «*». * Обозначает любое количество любых символов. Таким образом, приведенный выше оператор If вернет ИСТИНА. Оператор Like — чрезвычайно мощный, но часто недостаточно используемый инструмент для работы с текстом.
Если петли
Циклы VBA позволяют повторять действия. Комбинирование IF-ELSE с циклами — отличный способ быстро обработать многие вычисления.
Продолжая наш пример Положительного / Отрицательного, мы добавим цикл For Each Loop для перебора диапазона ячеек:
1234567891011121314 | Sub If_Loop ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («A2: A6»)Если Cell.Value> 0, тоCell.Offset (0, 1) .Value = «Положительный»ElseIf Cell.Value <0 ТогдаCell.Offset (0, 1) .Value = «Отрицательное»ЕщеCell.Offset (0, 1) .Value = «Ноль»Конец, еслиСледующая ячейкаКонец подписки |
Если остальные примеры
Теперь перейдем к более конкретным примерам.
Проверить, пуста ли ячейка
Этот код проверяет, пуста ли ячейка. Если он пуст, он проигнорирует ячейку. Если он не пустой, он выведет значение ячейки в ячейку справа:
1234567 | Sub If_Cell_Empty ()Если Range («a2»). Value «» ThenДиапазон («b2»). Значение = Диапазон («a2»). ЗначениеКонец, еслиКонец подписки |
Проверьте, содержит ли ячейка определенный текст
Функция Instr проверяет, найдена ли строка текста в другой строке. Используйте его с оператором If, чтобы проверить, содержит ли ячейка определенный текст:
123 | Если Instr (Range («A2»). Value, «text»)> 0, тоMsgbox «Текст найден»Конец, если |
Проверить, содержит ли ячейка текст
Этот код проверит, является ли ячейка текстом:
1234567 | Sub If_Cell_Is_Text ()Если Application.WorksheetFunction.IsText (Range («a2»). Value), тоMsgBox «Ячейка — это текст»Конец, еслиКонец подписки |
Если Goto
Вы можете использовать результат оператора If, чтобы «перейти к» другому разделу кода.
12345678910 | Sub IfGoTo ()Если IsError (Cell.value), тоПерейти к пропускуКонец, если’Некоторый кодПропускать:Конец подписки |
Удалить строку, если ячейка пуста
Используя If и циклы, вы можете проверить, пуста ли ячейка, и, если да, удалить всю строку.
123456789 | Sub DeleteRowIfCellBlank ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («A2: A10»)Если Cell.Value = «» Тогда Cell.EntireRow.DeleteСледующая ячейкаКонец подписки |
Если MessageBox Да / Нет
С помощью окон сообщений VBA вы можете попросить пользователя выбрать один из нескольких вариантов. Окно сообщения Да / Нет предлагает пользователю выбрать Да или Нет. Вы можете добавить Окно сообщения Да / Нет в процедуру, чтобы спросить пользователя, хотят ли они продолжить выполнение процедуры или нет. Вы обрабатываете ввод пользователя с помощью оператора If.Вот окно сообщения Да / Нет на практике:
123456789101112 | Sub MsgBoxVariable ()Тусклый ответ как целое числоanswer = MsgBox («Продолжить?», vbQuestion + vbYesNo)Если answer = vb Да ТогдаMsgBox «Да»ЕщеMsgBox «Нет»Конец, еслиКонец подписки |
VBA If, ElseIf, Else в Access VBA
Функции If, ElseIf и Else в Access VBA работают точно так же, как и в Excel VBA.
Вы можете использовать оператор If, чтобы проверить, есть ли записи в наборе записей.
Excel VBA String Compare
In our day to day life, we often do comparisons. Comparisons between two people, comparison between two products, comparison between two numbers and for that sake, comparison between two strings as well. While, for comparing two numbers, we have different mathematical functions available such as equality operator, we are in this lecture about to have a look at how to compare strings in under VBA in Excel. The conventional equality operator provides either TRUE or FALSE as a result of a comparison between two numbers or texts. Under VBA, we have STRCOMP as a function that specifies the comparison between two strings. However, the results are not as same as the equality operator (TRUE/FALSE) instead we have three possible results, based on the comparison. We will go through this in detail in the next session of this article. Let’s see the syntax and working of the VBA STRCOMP function.
Syntax of VBA StrComp function:
Where,
String1 and String2 are the two string values we wanted to compare with each other.
How to Compare Strings in VBA?
VbCompareMethod is a method of comparison for the two strings provided. There are three types of comparison mentioned below:
- vbBinaryCompare: Compares two strings binarily and is case sensitive (‘UPPER’ does not equal to ‘upper’). This is the default comparison method if not specified.
- vbTextCompare: Compares two strings as texts and is not case sensitive (‘Upper’ equals to ‘upper’).
- vbDatabaseCompare: Compares the text through the database and is only available for Microsoft Access not under VBA.
This function can return three possible results as follows:
- 0 – If String1 matches with String2.
- 1 – If String1 does not match with String2 and in binary comparison case String1 is lesser than String2.
- -1 – If String 1 does not match with String 2 and in binary comparison case, String 1 is greater than String2.
Examples of String Comparison in VBA
Below are the examples of Excel VBA String Comparison:
You can download this VBA String Comparison — Excel Template here – VBA String Comparison — Excel Template
VBA String Comparison – Example #1
Let’s see some examples of the VBA StrComp function. For this, follow the below steps:
Step 1: Open a new Excel file and hit Alt + F11 to navigate towards the Visual Basic Editor. You can navigate to the Developers tab and click on the Visual Basic button to achieve the same result.
Step 2: Insert a new module inside Visual Basic Editor (VBE). Click on Insert tab > select Module.
Step 3: Define a new sub-procedure using the Sub-End clause that can hold your macro.
Code:
Sub Strcomp_Ex1() End Sub
Step 4: Define two new variables String1 and String2 with data type as a string that can be used to store the string values, we wanted to compare with each other.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String End Sub
Step 5: Assign text values to the two variables we have created using the assignment operator. I will assign values as ‘welcome to vba!’ and “WELCOME TO VBA!” respectively to the two variables.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String String1 = "welcome to vba!" String2 = "WELCOME TO VBA!" End Sub
Step 6: Now, define a new variable named CompResult as a string. This variable will be used to store the result of the StrComp function which compares whether two of the strings are equal or not.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String String1 = "welcome to vba!" String2 = "WELCOME TO VBA!" Dim CompResult As String End Sub
Step 7: Now, use the assignment operator to assign the value of StrComp function to this newly defined variable.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String String1 = "welcome to vba!" String2 = "WELCOME TO VBA!" Dim CompResult As String CompResult = StrComp( End Sub
Step 8: Provide the arguments this function statement requires. Use String1 as the first argument String2 variable as the second argument and use vbTextCompare as the comparison argument to this statement.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String String1 = "welcome to vba!" String2 = "WELCOME TO VBA!" Dim CompResult As String CompResult = StrComp(String1, String2, vbTextCompare) End Sub
Step 9: Use VBA MsgBox property to display the output of the StrComp statement which is stored under CompResult variable.
Code:
Sub Strcomp_Ex1() Dim String1 As String Dim String2 As String String1 = "welcome to vba!" String2 = "WELCOME TO VBA!" Dim CompResult As String CompResult = StrComp(String1, String2, vbTextCompare) MsgBox CompResult End Sub
Step 10: Run this code by hitting F5 or Run button placed at the uppermost ribbon of Visual Basic Editor.
Zero here in message box means that two texts we have stored under String1 and String2 are matching with each other though there is a case difference. This is because we have specified vbTextCompare as a comparison argument. This argument checks whether the texts are matching with each other or not irrespective of checking the cases.
VBA String Comparison – Example #2
Now, follow the below steps to compare strings in VBA.
Step 1: Define sub-procedure which can hold your macro.
Code:
Sub strcomp_Ex2() End Sub
Step 2: Define a variable Result as String so that we can assign a value of StrComp function to it.
Code:
Sub strcomp_Ex2() Dim Result As String End Sub
Step 3: Now use the Assignment operator to assign the value of StrComp to the variable named Result.
Code:
Sub strcomp_Ex2() Dim Result As String Result = StrComp( End Sub
Step 4: Now, we need to specify the arguments for this function. Use “india” as a String1, “INDIA” as String2 arguments.
Code:
Sub strcomp_Ex2() Dim Result As String Result = StrComp("india", "INDIA" End Sub
Step 5: For comparison of two strings, use vbBinaryCompare as an argument. It is OK if you put is as blank because it is an optional argument and has a default value as vbBinaryCompare itself. Due to this comparison operation, the system checks the binary codes of two strings given as input (which apparently will be different for two strings provided).
Code:
Sub strcomp_Ex2() Dim Result As String Result = StrComp("india", "INDIA", End Sub
Step 6: Use VBA MsgBox Property to display the Result in the Message box.
Code:
Sub strcomp_Ex2() Dim Result As String Result = StrComp("india", "INDIA", vbBinaryCompare) MsgBox Result End Sub
Step 7: Run this code by hitting F5 or Run button that is placed at the upper ribbon in Visual Basic Editor.
As soon as you run this code, you’ll see an output as “1” in the message box which means these two texts are not equal. Rightly so because of the use of vbBinaryCompare property. This is how we can compare two strings in VBA using the StrComp function. Let’s close this article with some points to be remembered:
Things to Remember
- Comparison argument is optional and can be skipped as it has a default value as vbBinaryCompare which checks the two strings with their binary codes. It means “UPPER” and “upper” are both different.
- If no string value provided, this function returns a Null value
- We can use this function to compare the email addresses of different clients.
- If the String1 is greater than String2. This happens in the case of Binary Comparison; the output will be -1 in that case.
Recommended Articles
This is a guide to the VBA String Comparison. Here we discuss how to Compare Strings in Excel VBA along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA SendKeys
- VBA Name Worksheet
- VBA CInt
- VBA SubString