VBA RegEx

VBA RegEx «Регулярное выражение» очень полезно в мире программирования, его можно использовать для проверки правильности ввода на сайте, поиска шаблонов слов в большой строке / тексте, поиска и замены строк.

Большинство из нас используют FIND, SUBSTITUTE, LEFT, RIGHT вместе с функциями MID для работы со строками в Microsoft Excel, не так ли? Однако эти функции имеют свои ограничения, которые не могут быть широко использованы. Знание регулярных выражений VBA сэкономит вам много времени в повседневной жизни. Регулярные выражения в VBA сокращенно обозначаются как «RegEx» (или Regex). В этом уроке мы рассмотрим некоторые из RegEx с их использованием.

Вы можете использовать объект VBA RegEx, который уже создан в библиотеке регулярных выражений Microsoft VBScript. Вы можете перемещаться по этой библиотеке, щелкнув Сервис - Справка - Регулярные выражения Microsoft VBScript.

Вы также можете создать объект RegEx с помощью функции CreateObject в VBA. Это кажется более удобным способом, потому что в этом случае вам не всегда нужно обращаться к библиотеке регулярных выражений VBScript.

Смотрите код ниже:

 Dim regex as Object Set regex = CreateObject ("VBScript.RegExp") 

Этот код позволит вам создавать и получать доступ к объектам RegEx в вашем макросе. Лично я предпочитаю этот способ первому из-за его жесткости.

Функция RegEx позволяет манипулировать следующим в длинной строке.

  • Wild Cards, как *, ? и т.п.
  • Сгруппированные выражения вместе с подстановочными знаками.

RegEx имеет следующие параметры / свойства:

  1. Шаблон - шаблон, определенный в RegEx, с которым вы хотите выполнить операции.
  2. IgnoreCase - игнорировать регистр букв (заглавные / не заглавные буквы совпадают в строке).
  3. Global - позволяет найти все возможные совпадения, если установлено значение TRUE. Если установлено как FALSE, он находит только первое совпадение.
  4. MultiLine - позволяет сопоставить шаблон в строке, которая распределена по нескольким строкам.

RegEx облегчает следующие три операции:

  • Тест - Проверяет, присутствует ли упомянутый шаблон в строке или нет. Если присутствует, возвращает TRUE, иначе FALSE.
  • Заменить - заменяет исходный рисунок другим.
  • Выполнить - возвращает все найденные подходящие шаблоны.

Как использовать Excel VBA RegEx?

Мы научимся использовать регулярные выражения Excel VBA на нескольких примерах.

Вы можете скачать этот шаблон VBA RegEx Excel здесь - Шаблон VBA RegEx Excel

Excel VBA RegEx - Пример № 1

Здесь вы проверите, присутствует ли упомянутый шаблон в тексте, используя RegEx.Test.

Выполните следующие шаги, чтобы использовать VBA RegEx.

Шаг 1: Определите новую подпроцедуру для создания макроса.

Код:

 Sub RegEx_Ex1 () End Sub 

Шаг 2: Определите две переменные RegEx как объект, которые можно использовать для создания объекта RegEx, и Str как строку.

Код:

 Sub RegEx_Ex1 () Dim RegEx как объект, Str как строка конец Sub 

Шаг 3: Создайте объект RegEx с помощью функции CreateObject.

Код:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Шаг 4: Добавьте шаблон для тестирования с помощью функции RegEx.

Код:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "(0-9) +" End With End Sub 

Шаг 5: Определите строку, в которой нам нужно проверить данный шаблон.

Код:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "(0-9) +" End With Str = "Мой номер велосипеда - MH-12 PP- 6145 "End Sub 

Шаг 6: Используйте RegEx.Test, чтобы проверить, присутствует ли данный шаблон в переменной с именем Str. Также используйте Debug.Print для печати результата (True или False) в ближайшем окне.

Код:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "(0-9) +" End With Str = "Мой номер велосипеда - MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Шаг 7: Нажмите F5 или кнопку Run, чтобы запустить код и увидеть результат. (Нажмите CTRL + G, чтобы открыть окно «Немедленно»)

Здесь мы создали объект RegEx. Затем с помощью VBA RegEx мы проверили, присутствует ли данный шаблон («(0-9) +»), который включает все числа / комбинации чисел от 0 до 9, в строке, определенной с помощью RegEx.Test ( Str). Вывод «True» в непосредственном окне показывает, что шаблон «(0-9) +» присутствует в данной строке.

Excel VBA RegEx - Пример № 2

Здесь вы увидите, как вы можете заменить одну строку другой, используя RegEx.Replace.

Выполните следующие шаги, чтобы использовать VBA RegEx.

Шаг 1: Определите новую подстроку для создания макроса.

Код:

 Sub RegEx_Ex2 () End Sub 

Шаг 2: То же, что и в первом примере, определите две переменные RegEx как объект, который может содержать значение объекта RegEx, и Str, который будет содержать значение строки, которую вы определите.

Код:

 Sub RegEx_Ex2 () Dim RegEx как объект, Str как строка конец Sub 

Шаг 3: Определите объект RegEx и установите для него переменную RegEx, используя функцию CreateObject.

Код:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Шаг 4: Вставьте шаблон, который вы хотите заменить, используя функцию .Pattern.

Код:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" Конец с End Sub 

Шаг 5: Используйте .GLOBAL = TRUE, который, если TRUE, позволяет заменить все совпадающие шаблоны в данной строке. Если FALSE заменяет только первый соответствующий шаблон.

Код:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" .Global = True 'Если FALSE, заменяет только первую соответствующую строку' End With End Sub 

Шаг 6: После завершения с, определите строку, которую вы хотите сопоставить и заменить шаблон.

Код:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" .Global = True 'Если FALSE, заменяет только первую соответствующую строку' End With Str = Конечный сабвуфер "123-654-000-APY-123-XYZ-888" 

Шаг 6: Используйте RegEx.Replace, чтобы заменить значение шаблона в данной строке другим текстом.

Код:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" .Global = True 'Если FALSE, заменяет только первую соответствующую строку' End With Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Replaced") End Sub 

Здесь мы хотели, чтобы шаблон «123» был заменен каким-то другим фрагментом строки. RegEx.Replace позволяет заменить значение шаблона на фрагмент строки (мы определили «Replaced»). Пожалуйста, взгляните также на .Global = TRUE. Что является условным утверждением. Если Global = TRUE, функция Replace заменяет все совпадающие шаблоны на другую строку. Если GLOBAL = FALSE, функция Replace заменяет только первый соответствующий шаблон, а остальные игнорируются.

Шаг 7: Нажмите кнопку «Выполнить» или F5, чтобы запустить этот код и увидеть результат в окне «Немедленный вывод».

Excel VBA RegEx - Пример № 3

Здесь вы увидите, как вы можете найти все подходящие шаблоны в строке, используя RegEx.Execute.

Выполните следующие шаги, чтобы использовать Excel VBA RegEx.

Шаг 1: Определите новую подпроцедуру для добавления макроса.

Код:

 Sub RegEx_Ex3 () End Sub 

Шаг 2: Выполните шаги, такие же, как в предыдущих двух примерах, чтобы определить регулярное выражение и переменную, которая может содержать строковое значение.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Шаг 3: Вставьте шаблон, который вы хотите выполнить и сопоставить в данной строке.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" Конец с End Sub 

Шаг 4: Используйте .GLOBAL = TRUE, чтобы все совпадения были записаны в заданной строке.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True Конец с End Sub 

Шаг 5: Определите строку после End With, в которой вам нужно использовать Execute и найти все подходящие шаблоны.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True заканчивается со Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Шаг 6: Теперь используйте Execute для переменной с именем string, чтобы узнать все совпадения, связанные с данным шаблоном.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True заканчивается со Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Установить совпадения = RegEx.Execute (Str) End Sub 

Шаг 7: Используйте цикл For, чтобы напечатать значение всех совпавших шаблонов в окне непосредственного вывода.

Код:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True заканчивается со Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Установить совпадения = RegEx.Execute (Str) Для каждого совпадения совпадений. Debug.Print Match.Value Next Match End Sub 

Шаг 8: Запустите этот код, нажав F5 или кнопку Run, и увидите результат в окне немедленного вывода.

Этот код печатает все количество совпадений для определенного шаблона.

То, что нужно запомнить

  • Регулярное выражение VBA можно использовать только для поиска строк. Очевидно, что для числовых значений нам не нужна такая функция. Все числовые значения, рассмотренные в каждом из трех приведенных выше примеров, фактически определены как строки.
  • Excel VBA RegEx должен использоваться для работы со строками, когда есть большие данные. Неиспользование VBA RegEx снижает эффективность программы.
  • VBA RegEx дает сбой, когда существуют сценарии, в которых шаблон повторяется n раз или бесконечно много раз для этого.

Рекомендуемые статьи

Это было руководство для VBA RegEx. Здесь мы обсудили, как использовать Excel VBA RegEx вместе с некоторыми практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

  1. Как использовать VBA Replace в Excel?
  2. Использование Вставить комментарий в Excel
  3. Создание VBA ТАЙМЕРА в Excel
  4. Вложенная формула IF в Excel

Категория: