VBA RegEx

VBA RegEx "Regular Expression" е много полезен в света на програмирането, който може да се използва за валидиране на въвеждането на уебсайтове, търсене на текстови модели в голям низ / текст, за търсене на редове и замяна.

Повечето от нас използват FIND, SUBSTITUTE, LEFT, Right и MID функции за манипулиране на струни в Microsoft Excel, нали? Тези функции обаче имат свои собствени ограничения, които не могат да се използват широко. Притежаването на знания за VBA Regular Expressions ще ви спести много време в ежедневния ви живот. Регулярните изрази са кратко формирани като „RegEx“ (или Regex) в VBA. В този урок ще разгледаме някои от RegEx с тяхното използване.

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

Можете също да създадете RegEx обект с помощта на CreateObject функция в VBA. Изглежда по-удобен начин, тъй като в този случай не винаги е необходимо да препращате библиотеката за регулярни изрази VBScript.

Вижте кода по-долу:

 Dim regex като Object Set regex = CreateObject ("VBScript.RegExp") 

Този код ще ви позволи да създадете и да получите достъп до RegEx обекти във вашия макрос. Аз лично предпочитам този начин пред първия поради неговата твърдост.

Функцията RegEx позволява да се манипулира следното в дълъг низ.

  • Wild карти като *, ? и т.н.
  • Групирани изрази заедно с подсказки.

RegEx има под параметри / свойства:

  1. Шаблон - Шаблонът, определен в RegEx, върху който искате да извършвате операции.
  2. IgnoreCase - Игнорирайте буквите на буквите (Caps / Non-Caps са еднакви в низ).
  3. Глобален - Позволява да се намерят всички възможни съвпадения, ако е зададено на ИСТИНСКИ. Ако е зададен като FALSE, той намира само първото съвпадение.
  4. MultiLine - Позволява съвпадение на шаблона в низ, който е разпределен по множество линии.

RegEx улеснява следните три операции:

  • Тест - Тества дали споменатият модел присъства в низ или не. Ако присъства, връща ИСТИНСКО, в противен случай ЛЕЖНО.
  • Замяна - заменя оригиналния модел с другия.
  • Изпълнение - Връща всички съвпадащи търсени модели.

Как да използвате Excel VBA RegEx?

Ще научим как да използваме Excel VBA Regular Expression с няколко примера.

Можете да изтеглите този шаблон на VBA RegEx Excel тук - VBA RegEx Excel шаблон

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

Тук ще проверите дали споменатият модел присъства в текста с помощта на RegEx.Test.

Следвайте стъпките по-долу, за да използвате VBA RegEx.

Стъпка 1: Определете нова под-процедура за създаване на макрос.

Код:

 Sub RegEx_Ex1 () Край Sub 

Стъпка 2: Определете две променливи RegEx като обект, който може да се използва за създаване на RegEx обект и Str като низ.

Код:

 Sub RegEx_Ex1 () Dim RegEx като обект, Str като String End Sub 

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

Код:

 Sub RegEx_Ex1 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Стъпка 4: Добавете модела за тестване с функция RegEx.

Код:

 Sub RegEx_Ex1 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "(0-9) +" End with End Sub 

Стъпка 5: Определете низа, в който трябва да проверим дадения шаблон.

Код:

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

Стъпка 6: Използвайте RegEx.Test, за да проверите дали даденият шаблон присъства в променливата, наречена Str. Също така използвайте Debug.Print, за да отпечатате резултата (True или False) в непосредствения прозорец.

Код:

 Sub RegEx_Ex1 () Dim RegEx като обект, Str като 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 ( ул). Изходът „True“ под непосредствения прозорец показва, че моделът „(0-9) +“ присъства в даден низ.

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

Тук ще видите как можете да замените единия низ с друг с помощта на RegEx.Replace.

Следвайте стъпките по-долу, за да използвате VBA RegEx.

Стъпка 1: Определете нов подряд, за да създадете макрос.

Код:

 Sub RegEx_Ex2 () Край Sub 

Стъпка 2: Същото като в първия пример, дефинирайте две променливи RegEx като обект, който може да побере стойността на обект RegEx и Str, който ще държи стойността на низ, който ще дефинирате.

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като String End Sub 

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

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Стъпка 4: Поставете шаблона, който искате да замените с помощта на .Pattern функция.

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" Край с край Sub 

Стъпка 5: Използвайте .GLOBAL = ИСТИНСКА, която ако TRUE позволява замяна на всички съвпадащи модели в даден низ. Ако FALSE замени само първия съвпадащ модел.

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" .Global = True 'Ако FALSE, заменя само първия съвпадащ низ' End with End Sub 

Стъпка 6: След End With определете низа, с който искате да съвпаднете и заменете шаблона.

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123" .Global = True 'Ако е FALSE, заменя само първия съвпадащ низ' End with Str = "123-654-000-APY-123-XYZ-888" Край Sub 

Стъпка 6: Използвайте RegEx.Replace, за да замените стойността на шаблона в дадения низ с друг текст.

Код:

 Sub RegEx_Ex2 () Dim RegEx като обект, Str като 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") Край Sub 

Тук искахме шаблона „123“ да бъде заменен с някакво друго парче низ. RegEx.Replace позволява да се замени стойността на шаблона с парчето низ (дефинирахме „Replaced“). Моля, също така разгледайте .Global = ИСТИНСКА. Което е условно изявление. Ако е Global = TRUE, функцията Replace замества всички съвпадащи модели с другия низ. Ако GLOBAL = FALSE, функцията Replace замества само първия модел на съвпадение, а останалите остават пренебрегвани.

Стъпка 7: Натиснете бутона Run или F5, за да стартирате този код и вижте изхода в прозореца за незабавен изход.

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

Тук ще видите как можете да намерите всички съвпадащи модели в низ, използвайки RegEx.Execute.

Следвайте стъпките по-долу, за да използвате Excel VBA RegEx.

Стъпка 1: Определете нова под-процедура за добавяне на макроса.

Код:

 Sub RegEx_Ex3 () Край Sub 

Стъпка 2: Следвайте стъпките същите като предишните два примера, за да дефинирате редовен израз и променлива, която може да съдържа стойността на низа.

Код:

 Sub RegEx_Ex3 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Стъпка 3: Поставете шаблон, който искате да бъде изпълнен и съчетан в дадения низ.

Код:

 Sub RegEx_Ex3 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" End with End Sub 

Стъпка 4: Използвайте .GLOBAL = ИСТИНСКА, така че всички съвпадения да бъдат заснети в дадения низ.

Код:

 Sub RegEx_Ex3 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True End с край Sub 

Стъпка 5: Определете низ след End with, под който трябва да използвате Execute и да намерите всички съвпадащи модели.

Код:

 Sub RegEx_Ex3 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Край Sub 

Стъпка 6: Сега използвайте Execute на променливата с име на низ, за ​​да разберете всички съвпадения, свързани с даден шаблон.

Код:

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

Стъпка 7: Използвайте For loop, за да отпечатате стойността на всички съвпадащи шарки в непосредствения изходен прозорец.

Код:

 Sub RegEx_Ex3 () Dim RegEx като обект, Str като String Set RegEx = CreateObject ("VBScript.RegExp") с RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Задаване на съвпадения = RegEx.Execute (Str) за всеки мач в мачове Debug.Print Match.Value Следващ мач Край Sub 

Стъпка 8: Стартирайте този код, като натиснете F5 или стартирате бутон и вижте изхода под прозореца за незабавен изход.

Този код отпечатва целия брой съвпадения за дефинирания модел.

Неща, които трябва да запомните

  • VBA Regular Expression може да се използва само за намиране на низовете. Очевидно е, че за числови стойности не се нуждаем от такава функция. Всички числови стойности, разгледани във всеки от трите примера по-горе, всъщност са дефинирани като низ.
  • Предполага се, че Excel VBA RegEx се използва за стринг манипулация, когато има големи данни. Ако не използвате VBA RegEx, намалявате ефективността на програмата.
  • VBA RegEx се проваля, когато има сценарии, при които шаблонът се повтаря n брой пъти или безкрайно време за това.

Препоръчителни статии

Това е ръководство за VBA RegEx. Тук обсъдихме как да използваме Excel VBA RegEx, заедно с някои практически примери и шаблон за excel за сваляне. Можете да разгледате и другите ни предложени статии -

  1. Как да използвате VBA Replace в Excel?
  2. Използване на Insert Comment в Excel
  3. Създаване на VBA TIMER в Excel
  4. Вложен IF формула в Excel

Категория: