Сравнение строк в VBA Excel с помощью функции StrComp, возвращающей результат сравнения двух строк в виде числа. Синтаксис, параметры, значения.
StrComp – это функция, которая сравнивает две указанные строки по длине и возвращает результат сравнения в виде числа (-1, 0, 1).
Синтаксис, параметры, значения
Синтаксис функции StrComp:
StrComp(String1, String2, [Compare])
Параметры функции StrComp:
Параметр | Описание |
---|---|
String1 | первая сравниваемая строка, обязательный параметр |
String2 | вторая сравниваемая строка, обязательный параметр |
Compare | тип сравнения строк, необязательный параметр, по умолчанию равен 0 (vbBinaryCompare) |
Тип сравнения строк (Compare):
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | используется тип сравнения, заданный оператором Option Compare |
vbBinaryCompare | 0 | выполняется двоичное сравнение (регистр имеет значение) |
vbTextCompare | 1 | выполняется текстовое сравнение (без учета регистра) |
Существует еще одна константа: vbDatabaseCompare, которая актуальна только для Microsoft Access.
Возвращаемые значения:
Значение | Описание |
---|---|
-1 | длина первой строки меньше длины второй |
0 | длина первой строки равна длине второй |
1 | длина первой строки больше длины второй |
Пример сравнения строк
Определяем, какой тип сравнения используется по умолчанию:
Sub Primer1() ‘Бинарное сравнение: MsgBox StrComp(«Корова», «корова», vbBinaryCompare) ‘результат: -1 ‘Текстовое сравнение: MsgBox StrComp(«Корова», «корова», vbTextCompare) ‘результат: 0 ‘Тип сравнения по умолчанию: MsgBox StrComp(«Корова», «корова») ‘результат: -1 (бинарное сравнение) End Sub |
13 / 13 / 11 Регистрация: 03.09.2011 Сообщений: 1,026 |
|
1 |
|
Сравнение строк с учетом регистра29.01.2015, 19:41. Показов 3111. Ответов 3
Подскажите, как в VBA сделать с учетом регистра?
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
29.01.2015, 19:49 |
2 |
Прокрути свою тему вниз — там аналогичные темы. 4-я из них (Olya1985) вроде даже буквально о том же.
1 |
iluxa1810 13 / 13 / 11 Регистрация: 03.09.2011 Сообщений: 1,026 |
||||
29.01.2015, 19:50 [ТС] |
3 |
|||
Sasha_Smirnov, Получается в самом начале модуля просто
Прописать?
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
29.01.2015, 20:00 |
4 |
iluxa1810, это наоборот — введёт неучёт регистра. А по умолчанию Like регистр различает. Так что никаких действий не требуется. Для противоположного случая (где заглавные и строчные буквы различать не надо) есть испытанный пример: Вывести на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
1 |
StrComp
StrComp(String1, String2[, Compare])
Функция StrComp служит для сравнения двух строк. Аналогична сравнению строк с помощью операторов арифметического сравнения
Возвращаемое значение
Возвращает значение типа Variant (Integer), представляющее результат сравнения строк
Возвращаемые значения
string1 меньше чем string2 | -1 |
string1 равняется string2 | 0 |
string1 больше чем string2 | 1 |
string1 или string2 имеет значение Null | Null |
Параметры
Функция содержит именованные аргументы
String1 | Обязательный аргумент — любое допустимое строковое выражение |
String2 | Обязательный аргумент — любое допустимое строковое выражение |
Compare | Необязательный аргумент. Указывает способ сравнения строк. Аргумент может быть опущен или иметь значение -1, 0, 1 или 2. Если аргумент имеет значение Null, возникает ошибка |
Именованный аргумент Compare имеет следующие значения:
Константа | Значение | Описание |
vbBinaryCompare | 0 | Двоичное сравнение по внутренним кодам символов.Буквы разных регистров считаются разными.Установлен по умолчанию |
vbTextCompare | 1 | Текстовое сравнение строк без учета регистра на основе системной национальной настройки |
vbDatabaseCompare | 2 | По установкам базы данных.Используется только в Microsoft Access |
Примечание: В справке указывается еще одно неправильное значение (vbUseCompareOption,-1). Однако, вы не сможете использовать этот параметр в своих программах, невзирая на справку
Пример
'В данном примере функция StrComp ' используется для сравнения строк Dim MyStr1, MyStr2, MyComp MyStr1 = "ABCD": MyStr2 = "abcd" MyComp = StrComp(MyStr1, MyStr2, 1) ' Возвращает 0 MyComp = StrComp(MyStr1, MyStr2, 0) ' Возвращает -1 MyComp = StrComp(MyStr2, MyStr1) ' Возвращает 1
Категория
Функции обработки строк
Содержание
- Использование функции StrComp для сравнения двух строк
- Использование функции StrComp с двоичным и текстовым методами
В VBA вы можете сравнить две строки, используя StrComp функция. В этом руководстве вы узнаете, как использовать эту функцию с различными методами сравнения.
Если вы хотите узнать, как использовать оператор VBA Like для сравнения неточных совпадений, щелкните здесь: Оператор Like VBA.
Если вы хотите узнать, как использовать операторы сравнения, щелкните здесь: Операторы сравнения VBA — не равно и др.
В StrComp функция принимает в качестве аргументов две строки и метод сравнения. Есть 3 метода сравнения:
- vbBinaryCompare — сравнивает две двоичные строки (с учетом регистра);
- vbTextCompare — сравнивает две строки как текст (без учета регистра);
- vbDatabaseCompare — этот метод доступен только в Microsoft Access, но не в VBA.
По умолчанию функция использует двоичный метод. Если мы опустим этот аргумент, функция будет чувствительна к регистру.
Функция возвращает следующие результаты:
- 0 — если строки равны;
- -1 — если строка 1 меньше строки 2;
- 1 — если строка 1 больше строки 2;
- Null — если одна из строк пуста.
Вот пример кода:
123 | Dim intResult как целое числоintResult = StrComp («Компьютер», «Компьютер») |
В этом примере мы хотим проверить, «Компьютер» а также «Компьютер» равны, используя метод сравнения по умолчанию (двоичный). Результат функции находится в intResult Переменная. Как вы можете видеть на изображении, обе строки равны, поэтому intResult имеет значение 0.
Изображение 1. Использование функции StrComp с двоичным методом в VBA
Использование функции StrComp с двоичным и текстовым методами
Теперь вы увидите разницу между использованием двоичного и текстового методов. Двоичный метод имеет двоичное число для каждого символа, поэтому в этом методе прописные и строчные буквы — разные символы. С другой стороны, текстовый метод считает «S» и «s» одними и теми же буквами. Если вы хотите сделать функцию нечувствительной к регистру, вам нужно установить для третьего аргумента значение vbBinaryCompare. Вот код:
123456 | Dim intResult1 как целое числоDim intResult2 как целое числоintResult1 = StrComp («Компьютер», «CompuTer»)intResult2 = StrComp («Компьютер», «CompuTer», vbTextCompare) |
Мы хотим сравнить строки «Компьютер» а также «Компьютер», используя оба метода.
В переменной intResult1, мы получим значение бинарным методом, а intResult2 получит значение текстовым методом. Вы можете увидеть значения этих двух переменных:
Изображение 2. Использование функции StrComp двоичным и текстовым методами.
Значение intResult1 равно 1, что означает, что для двоичного метода две строки различны. Для текстового метода эти две строки равны, поэтому значение intResult2 равно 0.
Вы поможете развитию сайта, поделившись страницей с друзьями
Return to VBA Code Examples
In VBA, you can compare two strings using the StrComp function. In this tutorial, you will learn how to use this function with different comparison methods.
If you want to learn how to use VBA like operator to compare inexact matches, click here: VBA Like Operator.
If you want to learn how to use comparison operators, click here: VBA Comparison Operators – Not Equal to & More
Using the StrComp Function to Compare Two Strings
The StrComp function takes two strings and comparison method as arguments. There are 3 methods of comparison:
- vbBinaryCompare – compares two strings binary (case-sensitive);
- vbTextCompare – compares two strings as texts (case-insensitive);
- vbDatabaseCompare – this method is available only in Microsoft Access and not in VBA.
By default, the function uses the binary method. If we omit this argument, the function will be case-sensitive.
The function returns the following results:
- 0 – if strings are equal;
- -1 – if string 1 is less than string 2;
- 1 – if string 1 is greater than string 2;
- Null – if one of the strings is empty.
Here is the example code:
Dim intResult As Integer
intResult = StrComp("Computer", "Computer")
In this example, we want to check if strings “Computer” and “Computer” are equal, using the default comparison method (binary). The result of the function is in the intResult variable. As you can see in Image, both strings are equal, therefore the intResult has value 0.
Image 1. Using the StrComp function with the binary method in VBA
Using the StrComp Function with Binary and Textual Method
You will now see the difference between using the binary and textual method. The binary method has a binary number for each character, so the uppercase and lowercase are different characters in this method. On the other side, the textual method considers “S” and “s” as the same letters. If you want to make the function case-insensitive, you need to set the third argument to vbBinaryCompare. Here is the code:
Dim intResult1 As Integer
Dim intResult2 As Integer
intResult1 = StrComp("Computer", "CompuTer")
intResult2 = StrComp("Computer", "CompuTer", vbTextCompare)
We want to compare strings “Computer” and “CompuTer”, using both methods.
In the variable intResult1, we will get the value with the binary method, while the intResult2 will get the value with the textual method. You can see the values of these two variables:
Image 2. Using the StrComp function with binary and textual method
The value of intResult1 is 1, which means that two strings are different for the binary method. For the textual method, these two strings are equal, so the value of intResult2 is 0.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!