Vba excel сравнение строк

Vba excel сравнение строк

Операторы сравнения

Оператор Синтаксис Описание
= A = B Равенство: Если А равно В, то — True. Иначе — False
Если А меньше В, то — True. Иначе — False
Если А меньше или равно В, то — True. Иначе — False
> A > B Больше: Если А больше В, то — True. Иначе — False
>= A >= B Больше или равно: Если А больше или равно В, то — True. Иначе — False
<> A <> B Не равно: Если А не равно В, то — True. Иначе — False

Обычно операции сравнения используются в операторах организации циклов для принятия какого-либо решения о дальнейшем ходе выполнения операций.

Результатом любой операции сравнения является значение типа Boolean: True, False.

Если оба операнда в выражении сравнения имеют один и тот же тип данных, VBA выполняет простое сравнение для этого типа.

Если оба операнда в выражении сравнения имеют определенные типы и эти типы не являются совместимыми, VBA выдает сообщение об ошибке несовпадения типов.

Если один или оба операнда в выражении сравнения являются переменными типа Variant, VBA пытается преобразовать тип Variant в какой-либо совместимый тип.

Сравнение строк

При сравнении строк операторами отношения, VBA сравнивает каждую строку слева направо посимвольно.

В VBA одна строка равна другой только, когда обе строки содержат точно такие же символы в точно таком же порядке и обе строки имеют одну и ту же длину. Например, строки "абвгд" "абвгд " " абвгд" не равны между собой, т.к. VBA не игнорирует начальные или конечные символы пробела при сравнении строк.

Следует быть внимательным при сравнении строк переменной длины.

Двоичное и текстовое сравнение строк

Для сохранения текста компьютер использует схему, в которой каждый отображаемый символ имеет уникальный номер. Все буквы алфавита имеют свои уникальные номера. Обычно буквы верхнего регистра имеют меньшие номера, чем буквы нижнего регистра. Число, соответствующее определенной букве или символу, называется кодом символа.

При выполнении двоичного сравнения строковой информации VBA использует бинарный эквивалент числа для каждого символа. Такой метод сравнения называется двоичным или бинарным и является методом сравнения по умолчанию.

Т.к. буквы верхнего регистра имеют меньшие двоичные номера, буквы верхнего регистра располагаются в алфавитном порядке перед буквами нижнего регистра. Поэтому при двоичном сравнении строк, строка "АБВ" будем меньше строки "абв".

Читайте также:  Зелёный уголок в ячейке excel

При текстовом сравнении строк VBA не использует двоичный эквивалент символов, и не "различает" верхнего и нижнего регистра. В текстовом сравнении строка "абв" равна строке "АБВ".

Для выбора метода сравнения строк используется директива Option Compare

Option Compare [Text | Binary]

Данная директива должна находиться в области объявления модуля.

Конкатенация строк

Присоединение одной строки к другой называется конкатенацией строк.

Конкатенацию строк обычно используют для формирования строк из различных источников в процедуре, чтобы создавать сообщение для вывода на экран. В VBA имеется два оператора для конкатенации строк.

Оператор конкатенации (&)

Оператор (&)в VBA используется только для конкатенации строк.

Операнд_1 & Операнд_2 [& Операнд_3..]

Операнд_N — любое допустимое строковое или численное выражение (которое преобразуется в строковое).

Тип данных результата конкатенации строк — String.

Если операнд в выражении конкатенации строк имеет значение Empty или Null, VBA интерпретирует этот операнд как строку нулевой длины (строка не содержащая символов).

Обратите внимание! Символ (&) операции конкатенации обязательно необходимо отделять пробелом от имени переменной, т.к. в противном случае VBA может интерпретировать этот символ как символ определения типа Long.

Оператор сложения в конкатенации строк

Для конкатенации строк можно также использовать оператор (+).

Этот оператор имеет такой же синтаксис и требования, как и оператор (&). Однако следует понимать, что в VBA основное предназначение оператора (+) — это арифметическое сложение. Поэтому, чтобы избежать двусмысленности чтения программного кода, для конкатенации строк настоятельно рекомендуется использовать именно оператор (&).

Приоритеты выполнения операций

Многие из выражений в программной коде являются сложными (составными), т.е. состоят из двух или более выражений.

При вычислении сложных выражений VBA следует следующим правилам:

  • Части выражения, заключенные в круглые скобки, всегда вычисляются в первую очередь;
  • Конкретные операции выполняются в зависимости от иерархии операторов (таблица ниже);
  • При равенстве иерархии операторов, они вычисляются слева направо.
Оператор Комментарии
^ Возведение в степень, высший приоритет
Унарный минус
* / Умножение и деление имеют равные приоритеты
MOD
+ — Сложение и вычитание имеют равные приоритеты
& Конкатенация строк выполняется после арифметических операций перед операциями сравнения и логическими операциями
= ><> Все операции сравнения имеют равные приоритеты и выполняются слева направо. Для группирования операций надо пользоваться круглыми скобками
NOT
AND
OR
XOR
EQV
IMP
Читайте также:  Как добавить приложение в режим максимального энергосбережения

В начало страницы

В начало страницы

8549 просмотра

1 ответ

166 Репутация автора

Я использую VBA в течение последнего месяца (для моей работы), и поскольку я начал использовать этот язык / скрипт, было несколько случаев, когда у меня были проблемы с сопоставлением строк .. способы, которыми я сравнивал строки, так что далеко:

  • str1 = str2 и str1 <> str2
  • StrComp (str1, str2, метод сравнения)
  • InStr (str1, str2)

Иногда, прежде чем использовать один из этих методов сравнения, я сначала применим UCase (str1) или даже UCase (Trim (str1)) . По моему опыту, хотя сравнение строк в VBA кажется довольно изменчивым , потому что я чувствую, что получаю несогласованные результаты.

ВОПРОС: Какая наилучшая процедура для сравнения двух строк в VBA ?

EDIT: см. Мой комментарий для примера.

Ответы (1)

5 плюса

4461 Репутация автора

Первый вопрос: если вы хотите сравнить регистр с учетом регистра или нечувствительность — другими словами: есть "ABC" = "abc" .

Поведение = -оператора определяется по Option Compare -умолчанию binary .

Функция StrComp -function получает те же результаты, но без необходимости установки опции сравнения в верхней части модуля. Вместо этого вы можете указать желаемый способ сравнения в качестве параметра:

если у вас есть ведущие или завершающие пробелы в ваших строках, вы всегда должны использовать trim — так обстоит дело на любом языке программирования, который я знаю.

Использование Instr — довольно плохая идея проверить, являются ли две строки одинаковыми, вы можете использовать ее для поиска подстроки. Обратите внимание, что InStr (а также его аналог InstrRev ) используют option compare параметр:

Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.

Описание функции InStr

Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.

Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую. Смотрите ниже Пример 3.

Читайте также:  Примеры работы с энкодером delta dvp eh2

Синтаксис, параметры, значения

Синтаксис функции InStr

Полный вариант:
InStr([начало], строка1, строка2, [сравнение])

Сокращенный вариант:
InStr(строка1, строка2)

Чаще всего в VBA Excel используется сокращенный вариант функции со значениями необязательных параметров по умолчанию.

Параметры функции InStr

Параметр Описание Значение по умолчанию
начало Необязательный аргумент.* Числовое выражение, которое задает начальную позицию для поиска. 1
строка1 Обязательный аргумент. Строковое выражение, в котором выполняется поиск.
строка2 Обязательный аргумент. Искомое строковое выражение.
сравнение Необязательный аргумент. Задает тип сравнения строк. –1**

* Если задан аргумент сравнение, аргумент начало является обязательным.
** Если аргумент сравнение не указан, используется значение инструкции Option Compare, заданное на уровне модуля. Если инструкция Option Compare в начале модуля отсутствует, используется ее значение по умолчанию – 0 (двоичное сравнение).

Если параметр начало или параметр сравнение содержит значение NULL, возникает ошибка.

Значения аргумента «сравнение»

Константа Значение Описание
vbUseCompareOption -1 Сравнение с помощью параметра инструкции Option Compare.
vbBinaryCompare Двоичное (бинарное) сравнение.*
vbTextCompare 1 Текстовое сравнение.*
vbDatabaseCompare 2 Сравнение на основе сведений из базы данных. Только для Microsoft Access.

* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.

Значения функции InStr

Если Возвращаемое значение
строка2 найдена в строке1 Позиция первого найденного соответствия.
строка2 не найдена в строке1
строка2 является пустой Значение аргумента начало.
строка2 равна NULL NULL
строка1 является пустой
строка1 равна NULL NULL
начало > длины строка1

Примеры использования в VBA Excel

Пример 1

Самый простой пример:

Пример 2

В этом примере, используя одинаковые строки, в которых выполняется поиск, и искомые подстроки, применим разные виды сравнения – двоичное (бинарное) и текстовое, и посмотрим на результаты.

Обратите внимание: несмотря на то, что начало поиска мы задали с 10 символа, номер позиции первого вхождения считается с начала строки, в которой выполняется поиск.

Пример 3

В этом примере посмотрим на результаты посимвольного и побайтового сравнения, опять же используя одинаковые строки и искомые подстроки.

Результат 7 при побайтовом сравнении получен для кодировки, у которой один символ составляет 2 байта.

Ссылка на основную публикацию
Titanium backup не устанавливается
Руководство по созданию резервной копии (бэкапа) Android с помощью приложения Titanium Backup. Если вы используете "Титаниум" впервые, информация будет для...
Ps4 произошла серьезная ошибка системного программного обеспечения
CE-36329-3 — это тот самый тип ошибки на PS4, с которой никто не захочет повстречаться. Наиболее часто владельцы данной консоли...
Reserved for asl что это
Есть компьютер: блок питания на 550 Вт, Материнская плата - ASUS Maximus IV Gene-Z, Процессор Intel Celeron G530 Видеокарта ASUS...
Titanium backup не видит резервные копии
Руководство по созданию резервной копии (бэкапа) Android с помощью приложения Titanium Backup. Если вы используете "Титаниум" впервые, информация будет для...
Adblock detector