Пошук тексту в рядку (функція INSTR) - Приклади коду VBA

Функція INSTR

Функція Instra VBA перевіряє, чи рядки тексту знайдені в іншому рядку тексту. Він повертає 0, якщо текст не знайдено. В іншому випадку він повертає позицію символу, де знаходиться текст.

Виконує функція Instr точно сірників. Оператор VBA Like Operator може використовуватися замість цього для виконання неточних відповідностей / узгодження шаблонів за допомогою символів підстановки.

Приклад Instr

Нижче наведений фрагмент коду шукає в рядку "Подивіться в цьому рядку" слово "Подивіться". Функція Instr повертає 1, оскільки текст знаходиться на першій позиції.

123 Sub FindSomeText ()MsgBox InStr ("Подивіться в цьому рядку", "Подивіться")End Sub

Цей другий приклад повертає 7, оскільки текст знаходиться починаючи з 7 -ї позиції:

123 Sub FindSomeText2 ()MsgBox InStr ("Не дивіться в цей рядок", "Дивіться")End Sub

Важливо! Функція Instr є з урахуванням регістру за замовчуванням. Це означає, що "погляд" не буде збігатися з "дивитися". Щоб зробити тест-регістр нечутливим, прочитайте нижче.

Синтаксис Instr

Синтаксис функції Instr такий:

1 Instr ([початок], рядок, підрядок, [порівняти])

[початок] (необов’язково) - Цей необов’язковий аргумент є вихідною позицією пошуку. Введіть 1, щоб почати пошук з позиції 1 (або залиште поле порожнім). Введіть 5, щоб почати пошук з позиції 5. Важливо! Функція INSTR обчислює позицію символу, рахуючи від 1 НЕ з позиції [старт].

рядок - Рядок тексту для пошуку.

підрядок - Рядок тексту для пошуку в первинному рядку.

[порівняти] (необов’язково) - За замовчуванням Instr чутливий до регістру. Встановивши цей аргумент, ви можете зробити Instr регістр нечутливим:

Аргумент vb Значення

Аргумент Ціле число Опис
vbBinaryCompare

0

(За замовчуванням) З урахуванням регістру

vbTextCompare

1

Не враховує регістр

vbDatabaseCompare

2

Тільки доступ MS. Для порівняння використовує інформацію в базі даних.

Instr Початкове положення

Початкова позиція Instr дозволяє вказати позицію символу, з якої ви почнете пошук. Майте на увазі, що вихід Instr завжди буде рахуватися від 1.

Тут ми встановлюємо початкове положення на 3, щоб пропустити перший B:

123 Sub Instr_StartPosition ()MsgBox InStr (3, "ABC ABC", "B")End Sub

Результат 6, тому що другий B - це 6 -й символ у рядку.

Тест INSTR з урахуванням регістру

За замовчуванням VBA розглядає "L", що відрізняється від "l". Іншими словами, VBA чутливий до регістру. Це стосується всіх текстових функцій. Щоб зробити VBA безчутливим до регістру, встановіть аргумент [порівняння] на 1 або vbTextCompare.

123 Загальнодоступний Sub FindText_IgnoreCase ()MsgBox InStr (1, "Не дивись у цей рядок", "дивись", vbTextCompare)End Sub

Крім того, ви можете додати параметр «Порівняти текст» у верхній частині модуля коду:

1 Опція Порівняти текст
12345 Опція Порівняти текстЗагальнодоступний Sub FindText_IgnoreCase2 ()MsgBox InStr ("Не дивись у цей рядок", "дивись")End Sub

Опція Порівняти текст вплине на весь код у цьому модулі. Я особисто ставлю це у верхній частині будь -якого модуля, який займається текстом, тому що я ніколи не дбаю про відмінності між регістром.

Функція InstrRev

Функція Instr здійснює пошук зліва. Замість цього ви можете шукати праворуч за допомогою функції InstrRev. Функція InstrRev працює дуже подібно до функції Instr.

123 Sub FindSomeText_FromRight ()MsgBox InStrRev ("Подивіться в цьому рядку", "Подивіться")End Sub

Так само, як і функція Instr, це поверне 1, тому що в тексті є лише один екземпляр “Подивіться”. Але якщо ми додамо другий "Погляд", ви побачите, що він повертає позицію самого правого "Погляду":

123 Sub FindSomeText_FromRight ()MsgBox InStrRev ("Подивіться в цьому рядку Подивіться", "Подивіться")End Sub

Далі ми розглянемо більше прикладів Instr.

Приклади InString

Якщо рядок містить підрядок

Тут ми будемо використовувати оператор If, щоб перевірити, чи містить рядок підрядок тексту:

123456789 Загальнодоступний Sub FindSomeText ()Якщо InStr ("Подивіться в цьому рядку", "подивіться") = 0 ТодіMsgBox "Немає відповідності"ІнакшеMsgBox "Принаймні одне збіг"Закінчити ЯкщоEnd Sub

Знайти текстовий рядок у клітинці

Ви також можете знайти рядок у комірці:

12345 Sub Find_String_Cell ()Якщо InStr (Діапазон ("B2"). Значення, "Доктор")> 0 ТодіДіапазон ("C2"). Значення = "Лікар"Закінчити ЯкщоEnd Sub

Або пройдіть по діапазону клітинок, щоб перевірити, чи містять клітинки певний текст:

12345678910 Sub Search_Range_For_Text ()Яскрава клітинка як діапазонДля кожної клітинки в діапазоні ("b2: b6")Якщо InStr (cell.Value, "Dr.")> 0 Тодіcell.Offset (0, 1) .Value = "Лікар"Закінчити ЯкщоНаступна клітинаEnd Sub

Знайдіть позицію символу в рядку

Цей код знайде позицію одного символу в рядку та призначить позицію змінній:

1234 Sub Find_Char ()Dim n As Longn = InStr ("Ось подивіться тут", "L")End Sub

Рядок пошуку Word

Цей код шукатиме рядок для слова:

12345678910 Sub Search_String_For_Word ()Dim n As Longn = InStr ("Тут подивіться тут", "Подивіться")Якщо n = 0 ТодіMsgBox "Слово не знайдено"ІнакшеMsgBox "Слово знайдено на місці:" & nЗакінчити ЯкщоEnd Sub

Якщо змінна містить рядок

Цей код перевірить, чи містить змінна рядка текст:

12345678 Sub Variable_Contains_String ()Dim str як рядокstr = "Подивіться тут"Якщо InStr (str, "Тут")> 0 ТодіMsgBox "Тут знайдено!"Закінчити ЯкщоEnd Sub

Instr і ліва функція

Instr можна використовувати разом з іншими текстовими функціями, такими як «Вліво», «Вправо», «Len» та «Середина», щоб обрізати текст.

За допомогою функції "Ліворуч" можна вивести текст перед рядком тексту:

1234567891011 Sub Instr_Left ()Dim str як рядокDim n As Longstr = "Подивіться тут"n = InStr (str, "Тут")MsgBox ліворуч (str, n - 1)End Sub

Використання Instr у Microsoft Access VBA

Усі наведені вище приклади працюють точно так само в Access VBA, як і в Excel VBA.

Щоб дізнатися більше, прочитайте нашу статтю: Текстові функції VBA

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

wave wave wave wave wave