Як знайти рядок за допомогою VBA в Excel (8 прикладів)

  • Поділитися Цим
Hugh West

Впровадження VBA це найефективніший, найшвидший і найбезпечніший спосіб виконання будь-якої операції в Excel. У цій статті ми покажемо вам, як знайти певні рядки в іншому заданому рядку за допомогою VBA в Excel.

Завантажити шаблон практики

Ви можете завантажити безкоштовний шаблон практики в Excel тут.

VBA для пошуку в String.xlsm

Функція InStr

Microsoft Excel має вбудовану функцію, яка називається Функція InStr для знаходження позиції конкретних рядків у заданому рядку.

Загальний синтаксис:

InStr([start], string1, string2, [compare])

Ось,

Аргументи Обов'язково/необов'язково Визначення
початок За бажанням Вихідна позиція пошуку.
  • За замовчуванням, у вікні InStr обчислює позицію символу, рахуючи від 1, а не від початкової позиції. Отже, ви можете залишити це поле пустим, якщо хочете.
string1 Необхідно Рядок для пошуку, Первинний рядок.
string2 Необхідно Рядок для пошуку в первинному рядку.
порівнювати За бажанням На сьогоднішній день, на жаль, це не так. InStr за замовчуванням є чутливою до регістру. Але якщо ви хочете виконати функцію без урахування регістру InStr то сюди можна передати аргумент для виконання певного порівняння. Цим аргументом можуть бути наступні значення,
  • vbBinaryCompare -> виконує бінарне порівняння, повертає значення 0
  • vbTextCompare -> виконує порівняння тексту, повертає значення 1
  • vbDatabaseCompare -> виконує порівняння баз даних, повертає значення 2

За замовчуванням, InStr дублі vbBinaryCompare як аргумент для порівняння.

8 простих прикладів знаходження конкретної позиції рядка в заданому рядку за допомогою VBA

Розглянемо декілька простих прикладів отримання позицій певних рядків у заданому рядку з допомогою VBA .

1. VBA для знаходження позиції тексту в рядку

Нижче наведено приклад InStr для знаходження позиції тексту в рядку.

  • Преса Alt + F11 на клавіатурі або перейдіть на вкладку Розробник - Visual Basic відкрити Редактор Visual Basic .

  • У вікні коду, що з'явилося, в рядку меню, що з'явилося, натисніть Вставка -> Модуль .

  • Тепер у вікні коду напишіть простий InStr програму всередині Підпроцедура VBA (див. нижче).
 Sub INSTR_Example() MsgBox InStr("Щастя - це вибір", "вибір") End Sub 

Ваш код тепер готовий до запуску.

  • Преса F5 на клавіатурі або в рядку меню виберіть Виконати -> Run Sub/UserForm Ви також можете просто натиснути на кнопку маленька іконка відтворення в рядку підменю для запуску макросу.

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

Пояснення:

Наш основний рядок, " Щастя - це вибір " - це речення з 21 літери (з пробілами) і ми хотіли знайти позицію тексту " вибір " в цьому рядку. Текст " вибір " починався з 16-ї позиції первинного рядка, звідси отримано число 16 як наш висновок у вікні повідомлення.

2. VBA для пошуку тексту з певної позиції в рядку

Тепер давайте з'ясуємо, що було б, якби ми хотіли отримати посаду з певного числа.

  • Як і раніше, відкрито Редактор Visual Basic від Розробник вкладка та Вставка a Модуль у вікні коду.
  • У вікні коду напишіть простий InStr і передайте значення в аргумент start відповідно до позиції, з якої ви хочете відраховувати текст.
 Sub INSTR_Example() MsgBox InStr(17, "Щастя - це вибір", "вибір") End Sub 

  • Наступний, Біжи код.

Ви побачите, що у спливаючому вікні повідомлення з'явиться номер, що декларує позицію тексту починаючи з певної позиції що ви хотіли перевірити.

Пояснення:

Як ми вже знали (з обговорення 1-го етапу), що текст " вибір " розпочався з позиції 16 тому ми вставили два " вибір " в первинному рядку і встановити 17 в якості нашого 1-го параметра пропустити перший " вибір "Отже, ми Біжи вищевказаний макрос і він показав нам номер позиції 27 що точно відповідає номеру позиції в другий " вибір " в заданому рядку.

3. пошук тексту в рядку з допомогою функції InStr без врахування регістру в VBA

З моменту введення в дію InStr Ви вже знаєте, що за замовчуванням функція InStr є чутливою до регістру. Розглянемо це на прикладі.

Див. наступне VBA код, де ми хотіли знайти позицію слова " Вибір велика літера "С" у рядку " Щастя - це вибір ", де вибір записується через маленька "с" .

  • Біжи код і знайти 0 на виході.

Це тому, що InStr функціональні ласощі велика літера "С" і маленька "с" по-іншому. Тож він шукав слово Вибір " в рядку і не отримав жодного співпадіння, тому повернув 0 .

  • Для того, щоб зробити InStr функція нечутливий до регістру встановіть аргумент порівняння рівним vbTextCompare (див. нижче).
 Sub INSTR_Example() MsgBox InStr(1, "Щастя - це вибір і вибір", "Вибір", vbTextCompare) End Sub 

  • Біжи код.

Ви отримаєте положення тексту з рядка, чи записаний текст в великі або малі літери .

4. VBA для пошуку тексту справа від рядка

До сьогоднішнього дня в Україні не було InStr видавала нам тільки позицію з лівого боку рядка. Але що робити, якщо потрібно знайти позицію тексту з правого боку рядка.

Функція InStrRev обшуки з правого боку. InStrRev працює дуже схоже на функцію InStr і вона знайде вам позицію тексту з правий бік струни.

Дивіться наступні приклади, щоб зрозуміти різницю.

  • Якщо виконати наступний код з ключем InStr тоді функціонуватимуть,

це дає нам позицію ( 16 ) першого тексту " вибір ".

  • Але якщо ми запустимо той самий код з InStrRev Тоді працюй,

це дає нам позицію ( 27 ) останнього тексту " вибір ".

Схожі читання:

  • FindNext Використання VBA в Excel (2 приклади)
  • Як знайти і замінити за допомогою VBA (11 способів)
  • Пошук точного збігу за допомогою VBA в Excel (5 способів)

5. VBA для знаходження позиції символу в рядку

Ви також можете знайти позицію певного символу в рядку так само, як знаходили текст.

  • Скопіюйте наступний код у ваш VBA вікно коду
 Sub Find_Character() Dim z As Long z = InStr("Щастя - це вибір", "e") MsgBox z End Sub 

  • І Біжи макрос.

Перший " e " в нашому заданому рядку знаходиться під номером 7 позицію.

6. VBA для пошуку підрядка в рядку

Тут ми навчимося знаходити, чи містить рядок підрядок чи ні.

Щоб отримати це, ми повинні запустити Звіт про фінансові результати в нашому кодексі.

  • Як і раніше, відкрито Редактор Visual Basic від Розробник вкладка та Вставка a Модуль у вікні коду.
  • У вікні коду скопіюйте наступний код та вставте його.
 Public Sub FindSub() If InStr("Щастя - це вибір", "вибір") = 0 Then MsgBox "Збігів не знайдено" Else MsgBox "Збіг знайдено" End If End Sub 

Ваш код тепер готовий до запуску.

  • Біжи макрос.

Якщо ваш рядок містить підрядок тоді ви отримаєте збіг знайдено У нашому прикладі ми хотіли з'ясувати, чи відповідає наш первинний рядок " Щастя - це вибір " містить слово " вибір "або ні. Коли це відбувається, ми отримуємо Збіг знайдено результат.

7. VBA для пошуку рядка в діапазоні комірок

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

Подивіться на наступний приклад, де ми знайдемо " Докторе. "і коли буде збіг, він повернеться" Докторе. ".

  • Нижче наведено код для отримання результату, про який йшлося вище,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Доктор")> 0 Then cell.Offset(0, 1).Value = "Доктор" End If Next cell End Sub 

  • Біжи код і результат наведено нижче

  • Ви можете модифікувати макрос відповідно до ваших потреб. Наприклад, якщо ви хочете знайти " Проф. " в будь-яку комірку рядка, і отримати " Професор " як return, то просто передайте " Проф. " в якості значення замість " Доктор ." в 4-му рядку макросу та " Професор " замість " Докторе. " у 5-му рядку макросу та відповідно визначити номер діапазону комірок.

8. VBA для пошуку рядка в комірці

Ви також можете пошук певного тексту в одній комірці рядка і повернути деякий рядок.

  • Скопіюйте наступний код та вставте його у вікно коду.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Він буде шукати " Докторе. " в Комірка B5 і якщо знаходить збіг, то повертає " Докторе. " в Комірка C5 .

  • Ви можете модифікувати макрос відповідно до ваших потреб. Наприклад, якщо ви хочете знайти " Проф. " в будь-яку комірку рядка, і отримати " Професор " як return, то просто передайте " Проф. " в якості значення замість " Доктор ." у 2-му рядку макросу та " Професор " замість " Докторе. " у 3-му рядку макросу і відповідно визначити номер посилання на комірку.

Висновок

У цій статті було показано, як знайти певні тексти в рядку в Excel за допомогою Макрос VBA. Сподіваюся, що ця стаття була для вас корисною і не соромтеся задавати будь-які питання по темі.

Г’ю Вест — досвідчений тренер і аналітик Excel із понад 10-річним досвідом роботи в галузі. Він має ступінь бакалавра з бухгалтерського обліку та фінансів і ступінь магістра з ділового адміністрування. Г’ю має пристрасть до викладання та розробив унікальний підхід до викладання, який легко зрозуміти та дотримуватися. Його експертне знання Excel допомогло тисячам студентів і професіоналів у всьому світі вдосконалити свої навички та досягти успіху в кар’єрі. У своєму блозі Г’ю ділиться своїми знаннями зі світом, пропонуючи безкоштовні навчальні посібники з Excel та онлайн-навчання, щоб допомогти окремим особам і компаніям повністю розкрити свій потенціал.