VBA RegEx

VBA RegEx “Regular Expression” er meget nyttig i programmeringsverdenen, som kan bruges til at validere webstedsinput, søge efter ordmønstre i stor streng / tekst, til strengsøgning og erstatning.

De fleste af os bruger FIND, SUBSTITUTE, VENSTRE, HØJRE sammen med MID-funktioner til strengmanipulation i Microsoft Excel, er vi ikke? Disse funktioner har imidlertid deres egne begrænsninger, som ikke kan bruges vidt. At have viden om VBA Regular Expressions sparer meget tid for dig i dit daglige liv. Regelmæssige udtryk er kort formet som “RegEx” (eller Regex) i VBA. I denne tutorial vil vi se på nogle af RegEx med deres anvendelse.

Du kan bruge VBA RegEx-objekt, som allerede er oprettet i Microsoft VBScript Regular Expressions-bibliotek. Du kan navigere i dette bibliotek ved at klikke på Værktøjer - Reference - Microsoft VBScript Regular Expressions.

Du kan også oprette et RegEx-objekt ved hjælp af CreateObject- funktion i VBA. Det virker mere praktisk, fordi du ikke altid behøver at henvise til VBScript Regular Expressions-biblioteket i dette tilfælde.

Se koden nedenfor:

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

Denne kode giver dig mulighed for at oprette og få adgang til RegEx-objekter i din makro. Jeg foretrækker personligt denne måde frem for den første på grund af dens stivhed.

RegEx-funktion gør det muligt at manipulere følgende i en lang streng.

  • Vilde kort som *, ? etc.
  • Grupperede udtryk sammen med vilde kort.

RegEx har nedenfor parametre / egenskaber:

  1. Mønster - Det mønster, der er defineret i RegEx, som du vil udføre operationer på.
  2. IgnoreCase - Ignorer tilfældet med bogstaver (Caps / Non-Caps er det samme i en streng).
  3. Globalt - Gør det muligt at finde alle mulige kampe, hvis det er indstillet til Sande. Hvis den er indstillet som FALSE, finder den kun den første kamp.
  4. MultiLine - Tillader at matche mønsteret i en streng, der er spredt langs flere linjer.

RegEx letter følgende tre operationer:

  • Test - Test om det nævnte mønster er til stede i strengen eller ej. Hvis tilstedeværende returnerer sandt, ellers FALSE.
  • Erstat - Erstatter det originale mønster med det andet.
  • Udfør - Returnerer alle søgte matchende mønstre.

Sådan bruges Excel VBA RegEx?

Vi lærer, hvordan du bruger Excel VBA Regular Expression med få eksempler.

Du kan downloade denne VBA RegEx Excel-skabelon her - VBA RegEx Excel-skabelon

Excel VBA RegEx - eksempel # 1

Her vil du kontrollere, om det nævnte mønster findes i teksten ved hjælp af RegEx.Test.

Følg nedenstående trin for at bruge VBA RegEx.

Trin 1: Definer en ny underprocedure for at oprette en makro.

Kode:

 Sub RegEx_Ex1 () End Sub 

Trin 2: Definer to variabler RegEx som et objekt, der kan bruges til at oprette RegEx-objekt og Str som en streng.

Kode:

 Sub RegEx_Ex1 () Dim RegEx som objekt, Str As String End Sub 

Trin 3: Opret RegEx-objekt ved hjælp af CreateObject-funktionen.

Kode:

 Sub RegEx_Ex1 () Dim RegEx som objekt, Str As String Sæt RegEx = CreateObject ("VBScript.RegExp") Slut Sub 

Trin 4: Tilføj det mønster, der skal testes med RegEx-funktion.

Kode:

 Sub RegEx_Ex1 () Dim RegEx som objekt, Str As String Sæt regEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With End Sub 

Trin 5: Definer den streng, inden vi skal kontrollere det givne mønster.

Kode:

 Sub RegEx_Ex1 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With Str = "Mit cykelnummer er MH-12 PP- 6145 "Slutund 

Trin 6: Brug RegEx.Test til at teste, om det givne mønster er til stede i den variabel, der hedder Str. Brug også Debug.Print til at udskrive resultatet (sandt eller falskt) i det umiddelbare vindue.

Kode:

 Sub RegEx_Ex1 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With Str = "Mit cykelnummer er MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Trin 7: Tryk på F5 eller Run-knappen for at køre koden og se output. (Tryk på CTRL + G for at åbne det øjeblikkelige vindue)

Her har vi oprettet et RegEx-objekt. Derefter har vi med VBA RegEx kontrolleret, om det givne mønster (“(0-9) +”), der inkluderer alle numre / kombination af tal fra 0 til 9, er til stede i den streng, der er defineret ved hjælp af RegEx.Test ( str). Output “True” under det umiddelbare vindue viser, at mønsteret “(0-9) +” er til stede i en given streng.

Excel VBA RegEx - eksempel # 2

Her vil du se, hvordan du kan erstatte den ene streng med en anden ved hjælp af RegEx.Replace.

Følg nedenstående trin for at bruge VBA RegEx.

Trin 1: Definer en ny understreng for at oprette en makro.

Kode:

 Sub RegEx_Ex2 () End Sub 

Trin 2: Samme som i det første eksempel, definer to variabler RegEx som et objekt, der kan indeholde værdien af ​​RegEx-objektet og Str, som holder værdien på den streng, du vil definere.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str As String End Sub 

Trin 3: Definer RegEx-objektet, og indstil det til RegEx-variabel ved hjælp af CreateObject-funktionen.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str As String Sæt RegEx = CreateObject ("VBScript.RegExp") Slut Sub 

Trin 4: Indsæt det mønster, du vil erstatte ved hjælp af .Pattern-funktion.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" End With End Sub 

Trin 5: Brug .GLOBAL = SAND, som hvis SAND tillader udskiftning af alle matchende mønstre i en given streng. Hvis FALSE kun erstatter det første matchende mønster.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = Sand 'Hvis FALSE, erstatter kun den første matchende streng' End With End Sub 

Trin 6: Efter slut med skal du definere den streng, du vil matche, og erstatte mønsteret med.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = Sandt 'Hvis FALSE, erstatter kun den første matchende streng' End With Str = "123-654-000-APY-123-XYZ-888" Slutund 

Trin 6: Brug RegEx.Rplace til at erstatte mønsterværdien i den givne streng med anden tekst.

Kode:

 Sub RegEx_Ex2 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = Sandt 'Hvis FALSE, erstatter kun den første matchende streng' End With Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "erstattet") End Sub 

Her ønskede vi, at mønsteret “123” skulle erstattes af et andet stykke streng. RegEx.Replace giver mulighed for at udskifte mønsterværdien med strengen (vi har defineret "Erstattet"). Se også .Global = Sande. Hvilket er en betinget erklæring. Hvis Global = SAND, erstatter funktionen Erstat alle matchende mønstre med den anden streng. Hvis GLOBAL = FALSE, erstatter funktionen Erstatt kun det første matchende mønster, og hvile andre forsømmes.

Trin 7: Tryk på knappen Kør eller F5 for at køre denne kode og se output i vinduet Umiddelbart output.

Excel VBA RegEx - eksempel # 3

Her ser du, hvordan du kan finde alle de matchende mønstre i en streng ved hjælp af RegEx.Execute.

Følg nedenstående trin for at bruge Excel VBA RegEx.

Trin 1: Definer en ny underprocedure for at tilføje makroen.

Kode:

 Sub RegEx_Ex3 () End Sub 

Trin 2: Følg trinene de samme som for de to foregående eksempler for at definere et regelmæssigt udtryk og en variabel, der kan indeholde strengværdien.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Slut Sub 

Trin 3: Indsæt et mønster, som du ønsker at blive udført og matchet i den givne streng.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" End With End Sub 

Trin 4: Brug .GLOBAL = SAND, så alle kampe fanges i den givne streng.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str Som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = Sandt slut med slut Sub 

Trin 5: Definer en streng efter End With, hvorunder du skal bruge Execute og finde alle de matchende mønstre.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Trin 6: Brug nu Execute på den navngivne streng for at finde ud af alle matcherne, der er knyttet til et givet mønster.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Sæt matches = RegEx.Execute (Str) End Sub 

Trin 7: Brug For loop til at udskrive værdien af ​​alle matchede mønstre i det umiddelbare outputvindue.

Kode:

 Sub RegEx_Ex3 () Dim RegEx som objekt, Str som streng Sæt RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Sæt kampe = RegEx.Execute (Str) for hver kamp I kampe Debug.Print Match.Value Næste match End Sub 

Trin 8: Kør denne kode ved at trykke på F5 eller køre-knappen og se output under det øjeblikkelige outputvindue.

Denne kode udskriver alt antallet af kampe for det definerede mønster.

Ting at huske

  • VBA Regular Expression kan kun bruges til at finde ud af strengene. For numeriske værdier har vi naturligvis ikke brug for en sådan funktion. Alle de numeriske værdier, der overvejes i hvert af de tre eksempler ovenfor, er faktisk defineret som en streng.
  • Excel VBA RegEx skal bruges til strengmanipulation, når der er store data. Hvis du ikke bruger VBA RegEx, reduceres programmets effektivitet.
  • VBA RegEx mislykkes, når der er scenarier, hvor et mønster gentager et antal gange eller uendelige gange for den skyld.

Anbefalede artikler

Dette har været en guide til VBA RegEx. Her diskuterede vi, hvordan man bruger Excel VBA RegEx sammen med nogle praktiske eksempler og downloadbar excel-skabelon. Du kan også gennemgå vores andre foreslåede artikler -

  1. Sådan bruges VBA Replace i Excel?
  2. Brug af Indsæt kommentar i Excel
  3. Oprettelse af VBA TIMER i Excel
  4. Indlejret IF-formel i Excel

Kategori: