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