Найти текст в строке (функция INSTR) - примеры кода VBA

Функция 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

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave