Зміст
Впровадження VBA це найефективніший, найшвидший і найбезпечніший спосіб виконання будь-якої операції в Excel. У цій статті ми покажемо вам, як знайти певні рядки в іншому заданому рядку за допомогою VBA в Excel.
Завантажити шаблон практики
Ви можете завантажити безкоштовний шаблон практики в Excel тут.
VBA для пошуку в String.xlsm
Функція InStr
Microsoft Excel має вбудовану функцію, яка називається Функція InStr для знаходження позиції конкретних рядків у заданому рядку.
Загальний синтаксис:
InStr([start], string1, string2, [compare])
Ось,
Аргументи | Обов'язково/необов'язково | Визначення |
---|---|---|
початок | За бажанням | Вихідна позиція пошуку.
|
string1 | Необхідно | Рядок для пошуку, Первинний рядок. |
string2 | Необхідно | Рядок для пошуку в первинному рядку. |
порівнювати | За бажанням | На сьогоднішній день, на жаль, це не так. InStr за замовчуванням є чутливою до регістру. Але якщо ви хочете виконати функцію без урахування регістру InStr то сюди можна передати аргумент для виконання певного порівняння. Цим аргументом можуть бути наступні значення,
За замовчуванням, 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. Сподіваюся, що ця стаття була для вас корисною і не соромтеся задавати будь-які питання по темі.