Excel vba if сравнение текста

Операторы сравнения чисел и строк, ссылок на объекты (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
Регистрация: 09.11.2015

#1

14.11.2015 12:51:00

Доброго времени суток.
Прошу вас подсказать. Нужно сравнить две строки на условие полного соответствия.
Пробовал:

Код
If КОММЕНТАРИЙ=ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ Then

не получилось.

Код VBA 13-я строка:

Код
Function АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА(ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ As String, ИМЯ_ЛИСТА As String)
'ВОЗВРАЩАЕТ АДРЕС ЯЧЕЙКИ С ИСКОМЫМ КОММЕНТАРИЕМ НА НУЖНОМ ЛИСТЕ
Application.Volatile True 'АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ РЕЗУЛЬТАТОВ
Dim ЛИСТ As Worksheet
Dim ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ
Dim КОММЕНТАРИЙ As String
Set ЛИСТ = Worksheets(ИМЯ_ЛИСТА)
On Error Resume Next
For Each ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ In Worksheets(ЛИСТ.Name).UsedRange
'ЦИКЛ ПРОВЕРКИ КОММЕНТАРИЯ КАЖДОЙ ЯЧЕЙКИ В РАБОЧЕЙ ОБЛАСТИ
КОММЕНТАРИЙ = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Comment.Text
If Err.Number = 0 Then
If InStr(1, КОММЕНТАРИЙ, ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ, vbTextCompare) <> 0 Then АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Address
Else
Err.Clear
End If
Next
End Function

Изменено: Vadim_EC14.11.2015 12:53:02

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#2

14.11.2015 12:56:50

Код
Option Compare Binary

и/или

Код
strcomp()

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#3

14.11.2015 13:00:49

А откуда у Вас должна ошибка взяться при присвоении текстовой переменной значения другой текстовой переменной

Код
КОММЕНТАРИЙ = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Comment.Text

В крайнем случае, результатом будет пустая строка. Попробуйте так

Код
If ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Comment.Text <> "" Then _
If InStr(1, КОММЕНТАРИЙ, ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ, vbTextCompare) <> 0 Then _
    АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Address

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

С виду код рабочий. Вероятно строки реально не равны. Проверьте, записав значения каждой строки в ячейку. Скорее всего где-то лишний пробел или другие символы отличаются. Например где-то «а» русская, а где-то английская. С виду одинаковые, а на деле отличаются.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#5

14.11.2015 13:05:16

Насчет ошибки был неправ, понял, что не во всех ячейках есть комменты. Тогда проверять

Код
If Not .Comment Is Nothing Then 
 

Vadim_EC

Пользователь

Сообщений: 9
Регистрация: 09.11.2015

#6

14.11.2015 13:26:34

Спасибо большое!
Код сработал с StrComp, и с «=»

Код
Function АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА2(ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ As String, ИМЯ_ЛИСТА As String)
'ВОЗВРАЩАЕТ АДРЕС ЯЧЕЙКИ С ИСКОМЫМ КОММЕНТАРИЕМ НА НУЖНОМ ЛИСТЕ
Application.Volatile True 'АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ РЕЗУЛЬТАТОВ
Dim ЛИСТ As Worksheet
Dim ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ
Dim КОММЕНТАРИЙ As String
Set ЛИСТ = Worksheets(ИМЯ_ЛИСТА)
On Error Resume Next
For Each ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ In Worksheets(ЛИСТ.Name).UsedRange
'ЦИКЛ ПРОВЕРКИ КОММЕНТАРИЯ КАЖДОЙ ЯЧЕЙКИ В РАБОЧЕЙ ОБЛАСТИ
КОММЕНТАРИЙ = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Comment.Text
If Err.Number = 0 Then
If StrComp(КОММЕНТАРИЙ, ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ) = 0 Then АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА2 = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Address
Else
Err.Clear
End If
Next
End Function

и

Код
Function АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА3(ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ As String, ИМЯ_ЛИСТА As String)
'ВОЗВРАЩАЕТ АДРЕС ЯЧЕЙКИ С ИСКОМЫМ КОММЕНТАРИЕМ НА НУЖНОМ ЛИСТЕ
Application.Volatile True 'АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ РЕЗУЛЬТАТОВ
Dim ЛИСТ As Worksheet
Dim ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ
Dim КОММЕНТАРИЙ As String
Set ЛИСТ = Worksheets(ИМЯ_ЛИСТА)
On Error Resume Next
For Each ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ In Worksheets(ЛИСТ.Name).UsedRange
'ЦИКЛ ПРОВЕРКИ КОММЕНТАРИЯ КАЖДОЙ ЯЧЕЙКИ В РАБОЧЕЙ ОБЛАСТИ
КОММЕНТАРИЙ = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Comment.Text
If Err.Number = 0 Then
If КОММЕНТАРИЙ = ЗНАЧЕНИЕ_ИСКОМОГО_КОММЕНТАРИЯ Then АДСС_ЯЧ_С_КОМ_ВЕРСИЯ_ДЛЯ_ВОПРОСА3 = ЯЧЕЙКА_РАБОЧЕЙ_ОБЛАСТИ.Address
Else
Err.Clear
End If
Next
End Function

Просто значение комментария было с новой строкой, а в ячейке было только значение текста.

Изменено: Vadim_EC14.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, чтобы проверить, есть ли записи в наборе записей.

VBA String Comparison

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:

 VBA String Comparison Syntax

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.

Developer Tab

Step 2: Insert a new module inside Visual Basic Editor (VBE). Click on Insert tab > select Module.

Insert Module

Step 3: Define a new sub-procedure using the Sub-End clause that can hold your macro.

Code:

Sub Strcomp_Ex1()

End Sub

VBA String Comparison Examples 1-3

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

VBA String Comparison Examples 1-4

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

VBA String Comparison Examples 1-5

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

New variable Examples 1-6

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

VBA String Comparison Examples 1-7

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

VBA String Comparison Examples 1-8

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

VBA String Comparison Examples 1-9

Step 10: Run this code by hitting F5 or Run button placed at the uppermost ribbon of Visual Basic Editor.

VBA String Comparison Examples 1-10

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

Sub-Procedure Examples 2-1

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

VBA String Comparison Examples 2-2

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

Assignment operator Examples 2-3

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

Argument Examples 2-4

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

Binary Code Examples 2-5

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

VBA String Comparison Examples 2-6

Step 7: Run this code by hitting F5 or Run button that is placed at the upper ribbon in Visual Basic Editor.

VBA String Comparison Examples 2-7

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 –

  1. VBA SendKeys
  2. VBA Name Worksheet
  3. VBA CInt
  4. VBA SubString

Понравилась статья? Поделить с друзьями:
  • Excel vba if два условия
  • Excel vba if больше или равно
  • Excel vba if worksheet selected
  • Excel vba if worksheet name is not
  • Excel vba if workbook opened