VBA reg

VBA RegEx „Regulárny výraz“ je veľmi užitočný v programovacom svete, ktorý sa dá použiť na overenie vstupu na web, vyhľadávanie vzorov slov vo veľkom reťazci / texte, na vyhľadávanie a nahrádzanie reťazcov.

Väčšina z nás používa funkcie FIND, SUBSTITUTE, LEFT, RIGHT spolu s funkciami MID na manipuláciu s reťazcami v programe Microsoft Excel, však? Tieto funkcie však majú svoje obmedzenia, ktoré nie je možné široko využívať. Znalosť pravidelných výrazov VBA vám ušetrí veľa času vo vašom každodennom živote. Regulárne výrazy sú vo VBA krátko tvarované ako „RegEx“ (alebo Regex). V tomto návode sa pozrieme na niektoré RegEx s ich využitím.

Môžete použiť objekt VBA RegEx, ktorý je už vytvorený v knižnici Microsoft VBScript Regular Expressions. V tejto knižnici sa môžete pohybovať kliknutím na Nástroje - Referencie - Regulárne výrazy Microsoft VBScript.

Objekt RegEx môžete tiež vytvoriť pomocou funkcie CreateObject vo VBA. Vyzerá to pohodlnejšie, pretože v tomto prípade nemusíte vždy posielať knižnicu regulárnych výrazov VBScript.

Pozrite si nasledujúci kód:

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

Tento kód vám umožní vytvárať a pristupovať k objektom RegEx vo vašom makre. Osobne uprednostňujem túto cestu pred prvou z dôvodu jej nepružnosti.

Funkcia RegEx umožňuje manipulovať s nasledujúcimi v dlhom reťazci.

  • Divoké karty ako *, ? atď.
  • Zoskupené výrazy spolu s divými kartami.

RegEx má nižšie uvedené parametre / vlastnosti:

  1. Vzor - Vzor definovaný v RegEx, s ktorým chcete vykonávať operácie.
  2. IgnoreCase - Ignorovanie malých a veľkých písmen ( veľké aj veľké písmená v reťazci).
  3. Globálne - umožňuje nájsť všetky možné zhody, ak je nastavená na hodnotu PRAVDA. Ak je nastavená ako FALSE, nájde iba prvú zhodu.
  4. MultiLine - umožňuje priradenie vzoru k reťazcu, ktorý je rozložený po viacerých riadkoch.

RegEx uľahčuje nasledujúce tri operácie:

  • Test - Testy, či je uvedený vzorec prítomný v reťazci alebo nie. Ak je prítomný vráti PRAVDY, inak FALSE.
  • Nahradiť - Nahradí pôvodný vzor iným.
  • Execute - Vráti všetky hľadané vzory.

Ako používať Excel VBA RegEx?

Naučíme sa, ako používať Excel VBA Regulárny výraz s niekoľkými príkladmi.

Túto šablónu VBA RegEx Excel si môžete stiahnuť tu - šablónu VBA RegEx Excel

Excel VBA RegEx - Príklad č. 1

Tu skontrolujete, či je uvedený vzorec prítomný v texte pomocou RegEx.Test.

Postupujte podľa nižšie uvedených krokov na použitie VBA RegEx.

Krok 1: Definujte novú čiastkovú procedúru na vytvorenie makra.

kód:

 Sub RegEx_Ex1 () End Sub 

Krok 2: Definujte dve premenné RegEx ako objekt, ktorý je možné použiť na vytvorenie objektu RegEx a Str ako reťazec.

kód:

 Sub RegEx_Ex1 () Dim RegEx ako objekt, Str ako String End Sub 

Krok 3: Vytvorenie objektu RegEx pomocou funkcie CreateObject.

kód:

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

Krok 4: Pridajte vzor, ​​ktorý sa má testovať pomocou funkcie RegEx.

kód:

 Sub RegEx_Ex1 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with End Sub 

Krok 5: Definujte reťazec, v rámci ktorého musíme skontrolovať daný vzorec.

kód:

 Sub RegEx_Ex1 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with Str = "Moje číslo bicykla je MH-12 PP- 6145 "End Sub 

Krok 6: Použite RegEx.Test na testovanie, či je daný vzorec prítomný v premennej s názvom Str. Použite tiež Debug.Print na vytlačenie výsledku (True alebo False) v okamžitom okne.

kód:

 Sub RegEx_Ex1 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with Str = "Moje číslo bicykla je MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Krok 7: Stlačením F5 alebo Run spustite kód a uvidíte výstup. (Stlačením klávesov CTRL + G otvoríte Okamžité okno)

Tu sme vytvorili objekt RegEx. Potom sme pomocou VBA RegEx skontrolovali, či daný vzorec („(0-9) +“), ktorý obsahuje všetky čísla / kombinácie čísiel od 0 do 9, je v reťazci definovanom pomocou RegEx.Test ( str). Výstup „True“ v okamžitom okne ukazuje, že v danom reťazci je prítomný vzor „(0-9) +“.

Excel VBA RegEx - Príklad č. 2

Tu uvidíte, ako môžete nahradiť jeden reťazec iným pomocou RegEx.Replace.

Postupujte podľa nižšie uvedených krokov na použitie VBA RegEx.

Krok 1: Definujte nový čiastkový reťazec na vytvorenie makra.

kód:

 Sub RegEx_Ex2 () End Sub 

Krok 2: Rovnaké ako v prvom príklade, definujte dve premenné RegEx ako objekt, ktorý môže držať hodnotu objektu RegEx a Str, ktorý bude držať hodnotu reťazca, ktorý definujete.

kód:

 Sub RegEx_Ex2 () Dim RegEx ako objekt, Str ako String End Sub 

Krok 3: Definujte objekt RegEx a pomocou funkcie CreateObject ho nastavte na premennú RegEx.

kód:

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

Krok 4: Vložte funkciu, ktorú chcete nahradiť pomocou funkcie .Pattern.

kód:

 Sub RegEx_Ex2 () Dim RegEx ako objekt, Str as String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" End with End Sub 

Krok 5: Použite .GLOBAL = TRUE, ktorý, ak TRUE umožňuje nahradiť všetky zodpovedajúce vzory v danom reťazci. Ak FALSE nahradí iba prvý zhodný vzorec.

kód:

 Sub RegEx_Ex2 () Dim RegEx ako objekt, Str as String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ak FALSE, nahradí iba prvý zodpovedajúci reťazec' End With End Sub 

Krok 6: Po skončení s definujte reťazec, ktorý chcete priradiť, a nahraďte vzor.

kód:

 Sub RegEx_Ex2 () Dim RegEx ako objekt, Str as String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ak FALSE, nahradí iba prvý zodpovedajúci reťazec' End with Str = "123-654-000-APY-123-XYZ-888" End Sub 

Krok 6: Použite RegEx.Replace na nahradenie hodnoty vzoru v danom reťazci iným textom.

kód:

 Sub RegEx_Ex2 () Dim RegEx ako objekt, Str as String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ak FALSE, nahradí iba prvý zodpovedajúci reťazec' End with Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Replaced") End Sub 

Tu sme chceli, aby bol vzorec „123“ nahradený iným reťazcom. RegEx.Replace umožňuje nahradiť hodnotu vzoru reťazcom (definovali sme „Replaced“). Pozrite sa tiež na .Global = TRUE. Čo je podmienečné vyhlásenie. Ak je Global = TRUE, funkcia Replace nahradí všetky zodpovedajúce vzory iným reťazcom. Ak GLOBAL = FALSE, funkcia Replace nahradí iba prvý zhodný vzor a ostatné ostatné sú zanedbané.

Krok 7: Kliknutím na tlačidlo Spustiť alebo F5 spustite tento kód a pozrite si výstup v okne Okamžitý výstup.

Excel VBA RegEx - Príklad č. 3

Tu uvidíte, ako môžete nájsť všetky zodpovedajúce vzory v reťazci pomocou RegEx.Execute.

Ak chcete použiť program Excel VBA RegEx, postupujte podľa nasledujúcich krokov.

Krok 1: Definujte novú čiastkovú procedúru na pridanie makra.

kód:

 Sub RegEx_Ex3 () End Sub 

Krok 2: Postupujte podľa rovnakých krokov ako v predchádzajúcich dvoch príkladoch a definujte regulárny výraz a premennú, ktorá dokáže uchovať hodnotu reťazca.

kód:

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

Krok 3: Do daného reťazca vložte vzorec, ktorý ste chceli spustiť a porovnať.

kód:

 Sub RegEx_Ex3 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" End with End Sub 

Krok 4: Použite .GLOBAL = TRUE, aby sa všetky zápasy zachytili v danom reťazci.

kód:

 Sub RegEx_Ex3 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With End Sub 

Krok 5: Definujte reťazec po End With, pod ktorým musíte použiť Execute a nájsť všetky zodpovedajúce vzory.

kód:

 Sub RegEx_Ex3 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Krok 6: Teraz použite Execute na premennej s názvom string, aby ste zistili všetky zhody spojené s daným vzorom.

kód:

 Sub RegEx_Ex3 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Nastavené zhody = RegEx.Execute (Str) End Sub 

Krok 7: Použite pre slučku na vytlačenie hodnoty všetkých zhodných vzorov do okna okamžitého výstupu.

kód:

 Sub RegEx_Ex3 () Dim RegEx ako objekt, Str ako String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Nastaviť zhody = RegEx.Execute (Str) pre každý zápas v zápasoch Debug.Print Match.Value Next Match End Sub Sub 

Krok 8: Spustite tento kód stlačením klávesu F5 alebo tlačidla Run a pozrite sa na výstup pod oknom okamžitého výstupu.

Tento kód vytlačí všetok počet zhôd pre definovaný vzor.

Čo je potrebné pamätať

  • VBA Regulárny výraz možno použiť iba na zistenie reťazcov. Je zrejmé, že pre číselné hodnoty takúto funkciu nepotrebujeme. Všetky číselné hodnoty uvažované v každom z troch vyššie uvedených príkladov sú v skutočnosti definované ako reťazec.
  • Excel VBA RegEx sa má používať na manipuláciu s reťazcami vždy, keď existujú veľké údaje. Nepoužívanie VBA RegEx znižuje účinnosť programu.
  • VBA RegEx zlyhá, keď existujú scenáre, kde sa vzor opakuje n, koľkokrát alebo nekonečne krát.

Odporúčané články

Toto bol sprievodca VBA RegEx. Tu sme diskutovali o tom, ako používať Excel VBA RegEx spolu s niekoľkými praktickými príkladmi a stiahnuteľnou vynikajúcou šablónou. Môžete si tiež prečítať naše ďalšie navrhované články -

  1. Ako používať VBA Replace v Exceli?
  2. Použitie Vložiť komentár v Exceli
  3. Vytvorenie VBA TIMER v Exceli
  4. Vnorený IF vzorec v Exceli

Kategórie: