VBA RegEx

VBA RegEx „Regulární výraz“ je velmi užitečný v programovacím světě, který lze použít k ověření vstupu na webové stránky, hledání vzorů slov ve velkém řetězci / textu, k vyhledávání a nahrazování řetězců.

Většina z nás používá FIND, SUBSTITUTE, LEFT, RIGHT spolu s MID funkcemi pro manipulaci s řetězci v Microsoft Excelu, že? Tyto funkce však mají svá vlastní omezení, která nelze široce použít. Znalost pravidelných výrazů VBA vám ušetří spoustu času ve vašem každodenním životě. Regulární výrazy jsou ve VBA zkráceny jako „RegEx“ (nebo Regex). V tomto tutoriálu se podíváme na některé RegEx s jejich využitím.

Můžete použít objekt VBA RegEx, který je již vytvořen v knihovně Microsoft VBScript Regular Expressions. Tuto knihovnu můžete procházet kliknutím na Nástroje - Reference - Regulární výrazy Microsoft VBScript.

Objekt RegEx můžete také vytvořit pomocí funkce CreateObject ve VBA. Vypadá to pohodlněji, protože v tomto případě nemusíte vždy odkazovat na knihovnu VBScript Regular Expressions.

Viz níže uvedený kód:

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

Tento kód vám umožní vytvářet a přistupovat k objektům RegEx ve vašem makru. Já osobně dávám přednost této cestě před první kvůli své rigiditě.

Funkce RegEx umožňuje manipulovat s následujícím v dlouhém řetězci.

  • Divoké karty jako *, ? atd.
  • Seskupené výrazy spolu s divokými kartami.

RegEx má níže uvedené parametry / vlastnosti:

  1. Vzor - Vzor definovaný v RegEx, se kterým chcete provádět operace.
  2. IgnoreCase - Ignorovat velká a malá písmena (velká i velká písmena v řetězci).
  3. Globální - umožňuje najít všechny možné zápasy, pokud je nastavena na PRAVDA. Pokud je nastavena na FALSE, najde pouze první shodu.
  4. MultiLine - Umožňuje přizpůsobení vzoru v řetězci, který je rozprostřen po více řádcích.

RegEx usnadňuje níže uvedené tři operace:

  • Test - Testy, zda je uvedený vzorec přítomen v řetězci nebo ne. Pokud je přítomen, vrátí PRAVDA, jinak FALSE.
  • Nahradit - Nahradí původní vzor jiným.
  • Execute - Vrátí všechny hledané odpovídající vzory.

Jak používat Excel VBA RegEx?

Naučíme se, jak používat Excel VBA Regulární výraz s několika příklady.

Tuto šablonu VBA RegEx Excel si můžete stáhnout zde - VBA RegEx Excel Template

Excel VBA RegEx - Příklad č. 1

Zde zkontrolujete, zda je uvedený vzor v textu přítomen pomocí RegEx.Test.

Chcete-li použít VBA RegEx, postupujte podle následujících kroků.

Krok 1: Definujte nový dílčí postup pro vytvoření makra.

Kód:

 Sub RegEx_Ex1 () End Sub 

Krok 2: Definujte dvě proměnné RegEx jako objekt, který lze použít k vytvoření objektu RegEx a Str jako řetězec.

Kód:

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

Krok 3: Vytvořte objekt RegEx pomocí funkce CreateObject.

Kód:

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

Krok 4: Přidejte vzorek, který chcete testovat pomocí funkce RegEx.

Kód:

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

Krok 5: Definujte řetězec, ve kterém musíme zkontrolovat daný vzorec.

Kód:

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

Krok 6: Pomocí RegEx.Test otestujte, zda je daný vzorec přítomen v proměnné s názvem Str. Pomocí Debug.Print také vytiskněte výsledek (True nebo False) do okamžitého okna.

Kód:

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

Krok 7: Stisknutím klávesy F5 nebo Run spustíte kód a uvidíte výstup. (Stisknutím kláves CTRL + G otevřete Okamžité okno)

Zde jsme vytvořili objekt RegEx. Poté jsme pomocí VBA RegEx zkontrolovali, zda daný vzorec („(0-9) +“), který obsahuje všechna čísla / kombinace čísel od 0 do 9, je přítomen v řetězci definovaném pomocí RegEx.Test ( Str). Výstup „True“ pod okamžitým oknem ukazuje, že v daném řetězci je přítomen vzor „(0-9) +“.

Excel VBA RegEx - Příklad č. 2

Zde uvidíte, jak můžete nahradit jeden řetězec jiným pomocí RegEx.Replace.

Chcete-li použít VBA RegEx, postupujte podle následujících kroků.

Krok 1: Definujte nový dílčí řetězec pro vytvoření makra.

Kód:

 Sub RegEx_Ex2 () End Sub 

Krok 2: Stejně jako v prvním příkladu definujte dvě proměnné RegEx jako objekt, který může obsahovat hodnotu objektu RegEx, a Str, který bude držet hodnotu řetězce, který definujete.

Kód:

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

Krok 3: Definujte objekt RegEx a pomocí funkce CreateObject jej nastavte na proměnnou RegEx.

Kód:

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

Krok 4: Pomocí funkce .Pattern vložte vzor, ​​který chcete nahradit.

Kód:

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

Krok 5: Použijte .GLOBAL = TRUE, což pokud TRUE umožňuje nahradit všechny odpovídající vzory v daném řetězci. Pokud FALSE nahradí pouze první odpovídající vzorec.

Kód:

 Sub RegEx_Ex2 () Dim RegEx jako objekt, Str As String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Pokud FALSE, nahradí pouze první odpovídající řetězec' End With End Sub 

Krok 6: Po End With definujte řetězec, se kterým chcete souhlasit, a nahraďte vzorek.

Kód:

 Sub RegEx_Ex2 () Dim RegEx jako objekt, Str As String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Pokud FALSE, nahradí pouze první odpovídající řetězec' End with Str = "123-654-000-APY-123-XYZ-888" End Sub 

Krok 6: Použijte RegEx.Replace k nahrazení hodnoty vzoru v daném řetězci jiným textem.

Kód:

 Sub RegEx_Ex2 () Dim RegEx jako objekt, Str As String Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Pokud FALSE, nahradí pouze první odpovídající řetězec' End with Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Replaced") End Sub 

Zde jsme chtěli, aby byl vzorec „123“ nahrazen jiným řetězcem. RegEx.Replace umožňuje nahradit hodnotu vzoru kusem řetězce (definovali jsme „Nahrazeno“). Podívejte se také na .Global = PRAVDA. Což je podmíněné prohlášení. Pokud Global = TRUE, nahradí funkce Replace všechny odpovídající vzory jiným řetězcem. Pokud GLOBAL = FALSE, nahradí funkce Replace pouze první odpovídající vzorec a ostatní ostatní budou zanedbány.

Krok 7: Stisknutím tlačítka Spustit nebo F5 spusťte tento kód a podívejte se na výstup v okně Okamžitý výstup.

Excel VBA RegEx - Příklad č. 3

Zde uvidíte, jak můžete najít všechny odpovídající vzory v řetězci pomocí RegEx.Execute.

Chcete-li použít Excel VBA RegEx, postupujte podle následujících kroků.

Krok 1: Definujte nový dílčí postup pro přidání makra.

Kód:

 Sub RegEx_Ex3 () End Sub 

Krok 2: Postupujte podle stejných kroků jako v předchozích dvou příkladech a definujte regulární výraz a proměnnou, která může obsahovat hodnotu řetězce.

Kód:

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

Krok 3: Vložte vzorek, který chcete v daném řetězci provést a porovnat.

Kód:

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

Krok 4: Použijte .GLOBAL = TRUE, aby všechny zápasy byly zachyceny v daném řetězci.

Kód:

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

Krok 5: Definujte řetězec po End With, pod kterým musíte použít Execute a najít všechny odpovídající vzory.

Kód:

 Sub RegEx_Ex3 () Dim RegEx jako objekt, Str As 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: Nyní použijte Execute na proměnné s názvem řetězce a zjistěte všechny shody spojené s daným vzorem.

Kód:

 Sub RegEx_Ex3 () Dim RegEx jako objekt, Str As 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 "Set match = RegEx.Execute (Str) End Sub 

Krok 7: Použijte pro smyčku pro tisk hodnoty všech odpovídajících vzorů do okna okamžitého výstupu.

Kód:

 Sub RegEx_Ex3 () Dim RegEx jako objekt, Str As 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 "Nastavit shody = RegEx.Execute (Str) pro každý zápas v zápasech Debug.Print Match.Value Next Match End Sub Sub 

Krok 8: Spusťte tento kód stisknutím klávesy F5 nebo tlačítka Run a podívejte se na výstup pod oknem okamžitého výstupu.

Tento kód vytiskne veškerý počet shod pro definovaný vzor.

Co si pamatovat

  • VBA Regulární výraz lze použít pouze k nalezení řetězců. Je zřejmé, že pro číselné hodnoty takovou funkci nepotřebujeme. Všechny číselné hodnoty uvažované v každém ze tří výše uvedených příkladů jsou ve skutečnosti definovány jako řetězec.
  • Excel VBA RegEx by měl být použit pro manipulaci s řetězci, kdykoli jsou velká data. Nepoužívání VBA RegEx snižuje účinnost programu.
  • VBA RegEx selže, pokud existují scénáře, kdy se vzor opakuje n kolikrát nebo nekonečně krát.

Doporučené články

Toto byl průvodce VBA RegEx. Zde jsme diskutovali o tom, jak používat Excel VBA RegEx spolu s několika praktickými příklady a stahovatelnou šablonou Excel. Můžete si také prohlédnout naše další doporučené články -

  1. Jak používat VBA Replace v Excelu?
  2. Pomocí Vložit komentář v Excelu
  3. Vytváření VBA TIMER v Excelu
  4. Vnořený IF vzorec v Excelu

Kategorie: