VBA InStrRev | Як використовувати функцію Excel VBA InStrRev?

Excel VBA INSTRREV

Функція VBA INSTRREV , що розшифровується як "In String Reverse" , повертає позицію першого входження пошукового рядка (підрядка) в інший рядок, починаючи з кінця рядка (справа наліво), з якого ми шукаємо рядок для пошуку.

Функція INSTRREV починає пошук рядка, який можна шукати, з кінця рядка, в якому нам потрібно це з’ясувати, але підраховує позицію з самого початку. Існує ще одна функція INSTR vba (розшифровується як рядку " ), яка також шукає рядок в іншому рядку і повертає позицію, але ця функція починає пошук з початку рядка, з якого ми шукаємо рядок, який можна шукати.

INSTRREV та INSTR , обидва - це вбудована функція рядка / тексту VBA MS Excel. Ми можемо використовувати їх під час написання будь-якого макросу в редакторі Microsoft Visual Basic.

Синтаксис

Як ми бачимо на наведеному вище зображенні, є 2 обов’язкові та 2 необов’язкові аргументи.

  • StringCheck As String: Це необхідний аргумент. Нам потрібно дати строковий вираз, який шукається.
  • StringMatch As String: Цей аргумент також необхідний. Нам потрібно вказати рядок, який шукається.
  • Почати як довго = -1: Це необов’язковий аргумент. Вказуємо числовий вираз. За замовчуванням потрібно -1, що означає, що пошук починається з останньої позиції символу. Якщо ми вкажемо будь-яке позитивне значення, таке як 80, тоді воно починає пошук з кінця рядка в цих 80 символах зліва.
  • Порівняти як VbCompareMethod = vbBinaryCompare As Long: Цей аргумент необов’язковий.

Ми можемо вказати такі значення для цього аргументу.

Повернені цінності

  1. Функція INSTRREV повертає 0, якщо перевірка рядків  має нульову довжину або  не знайдено збіг рядків або аргумент 'start' > довжина збігу рядків .
  2. Ця функція повертає значення "Null", якщо перевірка рядка  або збіг рядків  має значення "Null" .
  3. Якщо збіг рядків має нульову довжину, тоді функція повертається до початку .
  4. Якщо збіг рядків знайдено під час перевірки рядків , функція повертає позицію, в якій знайдено збіг.

Як використовувати функцію VBA INSTRREV?

Завантажити цей шаблон VBA INSTRREV Excel можна тут - Шаблон Excel VBA INSTRREV

Припустимо, у нас є дані про назви фільмів та їх режисерів. Ми хочемо розділити імена режисерів.

Ми маємо дані в 1201 рядку. Якщо ми виконаємо це завдання вручну, це займе багато часу.

Щоб зробити те саме, ми використаємо код VBA. Кроки:

  • Нам потрібно натиснути на команду 'Visual Basic', доступну в групі 'Код' на вкладці 'Розробник', або ми можемо натиснути Alt + F11, щоб відкрити редактор Visual Basic.

  • Ми вставимо модуль за допомогою меню "Вставити" .

  • Ми створимо підпрограму з назвою "SplittingNames" .

  • Нам потрібно 6 змінних. Один для зберігання значень комірок, якими ми будемо маніпулювати. Друге - для збереження позиції першого пробілу в рядку, третє - для зберігання положення останнього пробілу в рядку, четверте - для зберігання номера останнього рядка, п’яте та шосте - для рядка та стовпця, які ми будемо використовувати для друку значень у сусідніх клітинках.

  • Щоб дізнатися останній використаний рядок у аркуші, нам потрібно використати такий код.

Цей код спочатку виділить комірку B1, а потім - останню використану комірку в тому ж стовпці, а потім ми присвоїмо номер рядка комірки змінній 'LastRow'.

  • Тепер, щоб маніпулювати усіма клітинками стовпця B, ми запустимо цикл 'for' .

  • Ми будемо зберігати значення клітинок стовпця B від рядка 2 до рядка 1201 по черзі у змінній 's', щоб маніпулювати ними.

  • Нам потрібно встановити значення змінної 'Column' на 3, оскільки нам потрібно записати імена розділення в C (3-я колонка) і стовпець далі.

  • Якщо рядок - це лише одне слово, це означає, що в рядку немає місця, тоді ми хочемо, щоб сам рядок був вихідним. Для цього ми визначимо умову, використовуючи оператор "If and Else" зі знаком зірочки (що позначає один або кілька символів) наступним чином:

  • Якщо в рядку є місце, тоді ми хочемо розділити рядок. Для того, щоб зробити те саме, ми використовували функції INSTR та INSTRREV, щоб знайти першу позицію пробілу та останню позицію пробілу відповідно. Це допоможе нам знайти перше слово та останнє слово у рядку відповідно.

Функція INSTR приймає аргумент, як показано нижче:

Деталі аргументу

  • Початок: з якої позиції починати.
  • String1: нам потрібно дати рядок, який шукається.
  • String2: нам потрібно вказати рядок, який шукається.

Порівняно з VbCompareMethod: Вказівка ​​методу порівняння. За замовчуванням це двійкове порівняння.

  • Нам потрібно використовувати VBA ЛІВИЙ функцію для вилучення лівих символів з рядка. Ми використали 'Last Space-1', щоб отримати ліві символи перед останнім пробілом.

Нам потрібно скористатися функціями RIGHT та LEN для вилучення правильних символів із рядка після першого пробілу.

Макрос написаний. Тепер нам просто потрібно запустити макрос за допомогою клавіші F5 .

Код:

 Sub SplittingNames() Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range("B1").Select Selection.End(xlDown).Select LastRow = ActiveCell.Row For Row = 2 To LastRow s = Sheet1.Cells(Row, 2).Value Column = 3 If s Like "* *" Then FirstSpace = InStr(1, s, " ") LastSPace = InStrRev(s, " ") Sheet1.Cells(Row, Column).Value = Left(s, LastSPace - 1) Sheet1.Cells(Row, Column + 1).Value = Right(s, Len(s) - FirstSpace) Else Sheet1.Cells(Row, Column).Value = s End If Next End Sub 

We have a result now.