Vba: як замінити символи в рядку
Ви можете використовувати метод Replace() у VBA для заміни символів у рядку.
Цей метод використовує такий базовий синтаксис:
Замінити (вираз, знайти, замінити, почати, підрахувати)
золото:
- вираз : Рядок, у якому потрібно замінити символи
- find : Рядок для пошуку
- replace : Рядок для використання як заміни
- початок ( необов’язково ) : початкова позиція в рядку для пошуку
- count ( необов’язково ) : кількість замін, які потрібно виконати
У наведених нижче прикладах показано, як використовувати цей метод на практиці з таким списком рядків у Excel:
Приклад 1: використання VBA для заміни всіх входжень символів у рядку (з урахуванням регістру)
Скажімо, ми хочемо замінити “це” на “ТЕ” в кожному рядку.
Для цього ми можемо створити такий макрос:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(Range(" A " & i), " this ", " THAT ") Next i End Sub
Коли ми запускаємо цей макрос, ми отримуємо такий результат:
У стовпці B відображається кожен із рядків у стовпці A, де кожне входження “this” замінюється на “THAT”.
Зверніть увагу, що ця заміна чутлива до регістру .
Тобто кожне входження «this» замінюється, але кожне входження «this» залишається окремо.
Приклад 2: використання VBA для заміни всіх входжень символів у рядку (незалежно від регістру)
Скажімо, ми хочемо замінити «this» (незалежно від регістру) на «THAT» у кожному рядку.
Для цього ми можемо створити такий макрос:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(LCase(Range(" A " & i)), " this ", " THAT ") Next i End Sub
Коли ми запускаємо цей макрос, ми отримуємо такий результат:
У стовпці B відображається кожен із рядків у стовпці A, де кожне входження “this” замінюється на “THAT”.
Зверніть увагу, що ця заміна не чутлива до регістру .
Тобто кожне повторення слова “this” (з великої літери чи ні) замінюється.
Ми змогли виконати цю заміну без урахування регістру, використовуючи метод LCase , щоб спочатку перетворити кожен рядок у стовпці A на нижній регістр перед тим, як шукати «this» у кожному рядку.
Приклад 3: використання VBA для заміни перших N символів у рядку
Припустімо, що ми хочемо замінити лише перше входження “this” (незалежно від регістру) на “THAT” у кожному рядку.
Для цього ми можемо створити такий макрос:
Sub ReplaceChar() Dim i As Integer For i = 2 To 8 Range(" B " & i) = Replace(LCase(Range(" A " & i)), " this ", " THAT ", Count:=1) Next i End Sub
Коли ми запускаємо цей макрос, ми отримуємо такий результат:
Стовпець B відображає кожен із рядків у стовпці A лише з першим входженням “this” заміненим на “THAT”.
Зауважте, що ми використали Count:=1 для заміни лише першого входження певного рядка, але ви можете замінити 1 будь-яким значенням, яким хочете замінити перші n входжень певного рядка.
Примітка . Повну документацію щодо методу заміни VBA можна знайти тут .
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові завдання за допомогою VBA:
VBA: як підрахувати випадки появи символів у рядку
VBA: як перевірити, чи містить рядок інший рядок
VBA: як підрахувати клітинки з певним текстом