Функция INSTR
Функция VBA Instr проверяет, найдена ли строка текста в другой строке текста. Возвращает 0, если текст не найден. В противном случае он возвращает позицию символа, в которой находится текст.
Функция Instr выполняет точный Матчи. Вместо этого можно использовать оператор Like VBA для выполнения неточных совпадений / сопоставления с шаблоном с помощью подстановочных знаков.
Пример Instr
Следующий фрагмент кода ищет в строке «Искать в этой строке» слово «Искать». Функция Instr возвращает 1, потому что текст находится в первой позиции.
123 | Sub FindSomeText ()MsgBox InStr («Посмотри в этой строке», «Посмотри»)Конец подписки |
Этот второй пример возвращает 7, потому что текст находится начиная с 7-й позиции:
123 | Sub FindSomeText2 ()MsgBox InStr («Не смотри в эту строку», «Смотри»)Конец подписки |
Важный! Функция Instr деликатный случай по умолчанию. Это означает, что «взгляд» не будет совпадать с «взглядом». Чтобы сделать тест нечувствительным к регистру, читайте ниже.
Синтаксис Instr
Синтаксис функции Instr следующий:
1 | Instr ([начало], строка, подстрока, [сравнить]) |
[начало] (необязательно) - Этот необязательный аргумент - начальная позиция поиска. Введите 1, чтобы начать поиск с позиции 1 (или оставьте поле пустым). Введите 5, чтобы начать поиск с позиции 5. Важный! Функция INSTR вычисляет позицию символа, считая от 1 НЕ с позиции [начало].
нить - Строка текста для поиска.
подстрока - Строка текста, которую нужно найти в основной строке.
[сравнить] (необязательно) - По умолчанию Instr чувствителен к регистру. Установив этот аргумент, вы можете сделать Instr нечувствительным к регистру:
Аргумент vb Значение | Целое число аргумента | Описание |
vbBinaryCompare |
0 | (По умолчанию) с учетом регистра |
vbTextCompare |
1 | Нечувствительный к регистру |
vbDatabaseCompare |
2 | Только MS Access. Использует информацию из базы данных для сравнения. |
Начальная позиция Instr
Начальная позиция Instr позволяет вам указать позицию символа, с которой вы начнете поиск. Однако имейте в виду, что вывод Instr всегда будет отсчитывать от 1.
Здесь мы устанавливаем начальную позицию на 3, чтобы пропустить первую букву B:
123 | Sub Instr_StartPosition ()MsgBox InStr (3, «ABC ABC», «B»)Конец подписки |
Результат - 6, потому что второй B - шестой символ в строке.
Тест INSTR без учета регистра
По умолчанию VBA рассматривает «L» иначе, чем «l». Другими словами, VBA чувствителен к регистру. Это верно для всех текстовых функций. Чтобы сделать регистр VBA нечувствительным, установите для аргумента [compare] значение 1 или vbTextCompare.
123 | Общедоступная подпрограмма FindText_IgnoreCase ()MsgBox InStr (1, «Не смотри в эту строку», «смотри», vbTextCompare)Конец подписки |
В качестве альтернативы вы можете добавить Option Compare Text в верхнюю часть модуля кода:
1 | Вариант Сравнить текст |
12345 | Вариант Сравнить текстОбщедоступная подпрограмма FindText_IgnoreCase2 ()MsgBox InStr («Не смотри в эту строку», «смотри»)Конец подписки |
Option Compare Text повлияет на весь код в этом модуле. Я лично помещаю это в начало любого модуля, имеющего дело с текстом, потому что меня не волнуют различия в регистрах.
Функция InstrRev
Функция Instr выполняет поиск слева. Вместо этого вы можете искать справа, используя функцию InstrRev. Функция InstrRev работает аналогично функции Instr.
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev («Посмотри в этой строке», «Посмотри»)Конец подписки |
Как и функция Instr, она вернет 1, потому что в тексте есть только один экземпляр «Look». Но если мы добавим второй «Взгляд», вы увидите, что он возвращает положение самого правого «взгляда»:
123 | Sub FindSomeText_FromRight ()MsgBox InStrRev («Посмотрите в этой строке, Посмотрите», «Посмотрите»)Конец подписки |
Далее мы рассмотрим другие примеры Instr.
Примеры InString
Если строка содержит подстроку
Здесь мы будем использовать оператор If, чтобы проверить, содержит ли строка подстроку текста:
123456789 | Общедоступная подпрограмма FindSomeText ()Если InStr («Посмотри в этой строке», «посмотри») = 0, тоMsgBox «Нет совпадений»ЕщеMsgBox "Как минимум одно совпадение"Конец, еслиКонец подписки |
Найти текстовую строку в ячейке
Вы также можете найти строку в ячейке:
12345 | Sub Find_String_Cell ()Если InStr (Range ("B2"). Value, "Dr.")> 0, тоДиапазон ("C2"). Значение = "Доктор"Конец, еслиКонец подписки |
Или прокрутите диапазон ячеек, чтобы проверить, содержат ли ячейки какой-либо текст:
12345678910 | Sub Search_Range_For_Text ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне ("b2: b6")Если InStr (cell.Value, "Dr.")> 0 Тогдаcell.Offset (0, 1) .Value = "Доктор"Конец, еслиСледующая ячейкаКонец подписки |
Найти позицию символа в строке
Этот код найдет позицию одного символа в строке и присвоит эту позицию переменной:
1234 | Sub Find_Char ()Dim n As Longn = InStr («Вот, посмотри сюда», «L»)Конец подписки |
Строка поиска для слова
Этот код будет искать в строке слово:
12345678910 | Sub Search_String_For_Word ()Dim n As Longn = InStr («Вот, посмотри сюда», «Посмотри»)Если n = 0, тоMsgBox «Слово не найдено»ЕщеMsgBox "Слово найдено в позиции:" & nКонец, еслиКонец подписки |
Если переменная содержит строку
Этот код проверяет, содержит ли строковая переменная строку текста:
12345678 | Подпеременная_Contains_String ()Dim str As Stringstr = "Смотри сюда"Если InStr (str, "Here")> 0, тоMsgBox "Вот нашел!"Конец, еслиКонец подписки |
Instr и левая функция
Instr можно использовать вместе с другими текстовыми функциями, такими как Left, Right, Len и Mid для обрезки текста.
С помощью функции Left вы можете вывести текст перед строкой текста:
1234567891011 | Sub Instr_Left ()Dim str As StringDim n As Longstr = "Смотри сюда"n = InStr (str, «Здесь»)MsgBox Left (str, n - 1)Конец подписки |
Использование Instr в Microsoft Access VBA
Все приведенные выше примеры работают в Access VBA точно так же, как и в Excel VBA.
Чтобы узнать больше, прочитайте нашу статью: Текстовые функции VBA