VBA RegEx

VBA RegEx “Regular Expression” er veldig nyttig i programmering av verden som kan brukes til å validere inntasting av nettsteder, søke etter ordmønster i stor streng / tekst, for strengsøking og erstatning.

De fleste av oss bruker FINN, SUBSTITUTE, VENSTRE, HØYRE sammen med MID-funksjoner for strengmanipulering i Microsoft Excel, ikke sant? Imidlertid har disse funksjonene sine egne begrensninger som ikke kan brukes mye. Å ha kunnskap om VBA Regular Expressions vil spare mye tid for deg i ditt daglige liv. Vanlige uttrykk er kort formet som “RegEx” (eller Regex) i VBA. I denne opplæringen skal vi se på noe av RegEx med bruken av dem.

Du kan bruke VBA RegEx-objekt som allerede er opprettet i Microsoft VBScript Regular Expressions-biblioteket. Du kan navigere i dette biblioteket ved å klikke Verktøy - Referanse - Microsoft VBScript Regular Expressions.

Du kan også opprette et RegEx-objekt ved hjelp av CreateObject- funksjonen i VBA. Det virker mer praktisk fordi du ikke alltid trenger å henvise til VBScript Regular Expressions-biblioteket i dette tilfellet.

Se koden nedenfor:

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

Denne koden vil tillate deg å opprette og få tilgang til RegEx-objekter i makroen din. Jeg personlig foretrekker denne måten fremfor den første på grunn av dens stivhet.

RegEx-funksjonen lar deg manipulere følgende i en lang streng.

  • Wild Cards som *, ? etc.
  • Grupperte uttrykk sammen med jokertegn.

RegEx har under parametere / egenskaper:

  1. Mønster - Mønsteret som er definert i RegEx, som du vil utføre operasjoner på.
  2. IgnoreCase - Ignorer bokstaven (Caps / Non-Caps er samme i en streng).
  3. Global - Gjør det mulig å finne alle mulige treff hvis satt til SANN. Hvis den er satt som FALSE, finner den bare den første kampen.
  4. MultiLine - Lar samsvare med mønsteret i en streng som er spredt langs flere linjer.

RegEx letter de tre operasjonene nedenfor:

  • Test - Test om det nevnte mønsteret er til stede i strengen eller ikke. Hvis tilstedeværende returnerer SANN, ellers FALSE.
  • Erstatt - Erstatter det originale mønsteret med det andre.
  • Utfør - Returnerer alle søkte mønstre.

Hvordan bruke Excel VBA RegEx?

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

Du kan laste ned denne VBA RegEx Excel Mal her - VBA RegEx Excel Mal

Excel VBA RegEx - Eksempel # 1

Her vil du sjekke om det nevnte mønsteret er til stede i teksten ved å bruke RegEx.Test.

Følg trinnene nedenfor for å bruke VBA RegEx.

Trinn 1: Definer en ny delprosedyre for å lage en makro.

Kode:

 Sub RegEx_Ex1 () Slutt Sub 

Trinn 2: Definer to variabler RegEx som et objekt som kan brukes til å lage RegEx-objekt og Str som en streng.

Kode:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String End Sub 

Trinn 3: Lag RegEx-objekt ved hjelp av CreateObject-funksjonen.

Kode:

 Sub RegEx_Ex1 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Slutt Sub 

Trinn 4: Legg til mønsteret som skal testes med RegEx-funksjon.

Kode:

 Sub RegEx_Ex1 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With End Sub 

Trinn 5: Definer strengen som vi trenger for å sjekke det gitte mønsteret.

Kode:

 Sub RegEx_Ex1 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With Str = "Mitt sykkelnummer er MH-12 PP- 6145 "Slutt sub 

Trinn 6: Bruk RegEx.Test for å teste om det gitte mønsteret er til stede i variabelen som heter Str. Bruk også Debug.Print for å skrive ut resultatet (True eller False) i det umiddelbare vinduet.

Kode:

 Sub RegEx_Ex1 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "(0-9) +" End With Str = "Mitt sykkelnummer er MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Trinn 7: Trykk på F5 eller Run-knappen for å kjøre koden og se utdataene. (Trykk CTRL + G for å åpne øyeblikkelig vindu)

Her har vi laget et RegEx-objekt. Deretter har vi med VBA RegEx sjekket om det gitte mønsteret (“(0-9) +”) som inkluderer alle tallene / kombinasjonen av tall fra 0 til 9 er til stede i strengen definert ved hjelp av RegEx.Test ( str). Output “True” under det umiddelbare vinduet viser at mønsteret “(0-9) +” er til stede i en gitt streng.

Excel VBA RegEx - Eksempel # 2

Her vil du se hvordan du kan erstatte den ene strengen med en annen ved å bruke RegEx.Replace.

Følg trinnene nedenfor for å bruke VBA RegEx.

Trinn 1: Definer en ny understreng for å lage en makro.

Kode:

 Sub RegEx_Ex2 () Slutt Sub 

Trinn 2: Samme som i det første eksemplet, definer to variabler RegEx som et objekt som kan inneholde verdien til RegEx-objektet og Str som vil holde opp verdien til strengen du vil definere.

Kode:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String End Sub 

Trinn 3: Definer RegEx-objektet og sett det til RegEx-variabelen ved hjelp av CreateObject-funksjonen.

Kode:

 Sub RegEx_Ex2 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Slutt Sub 

Trinn 4: Sett inn mønsteret du vil erstatte ved å bruke .Pattern-funksjonen.

Kode:

 Sub RegEx_Ex2 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" End With End Sub 

Trinn 5: Bruk. GLOBAL = SANN, som hvis SANN tillater å erstatte alle samsvarende mønstre i en gitt streng. Hvis FALSE erstatter bare det første samsvarende mønsteret.

Kode:

 Sub RegEx_Ex2 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = True 'Hvis FALSE, erstatter bare den første matchende strengen' End With End Sub 

Trinn 6: Etter slutt med definerer du strengen du vil matche og erstatter mønsteret med.

Kode:

 Sub RegEx_Ex2 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = True 'Hvis FALSE, erstatter bare den første matchende strengen' End With Str = "123-654-000-APY-123-XYZ-888" Slutt sub 

Trinn 6: Bruk RegEx.Rplace for å erstatte mønsterverdien i den gitte strengen med annen tekst.

Kode:

 Sub RegEx_Ex2 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123" .Global = True 'Hvis FALSE, erstatter bare den første matchende strengen' End With Str = "123-654-000-APY-123-XYZ-888" Feilsøking. Skriv ut RegEx.Replace (Str, "Erstatt") End Sub 

Her ønsket vi at mønsteret "123" ble erstattet av et annet stykke streng. RegEx.Replace lar erstatte mønsterverdien med strengen (vi har definert “Erstatt”). Ta også en titt på .Global = SANN. Som er en betinget uttalelse. Hvis Global = TRUE, erstatter funksjonen Erstatt alle samsvarende mønstre med den andre strengen. Hvis GLOBAL = FALSE, erstatter funksjonen Erstatt bare det første samsvarende mønsteret og andre blir forsømt.

Trinn 7: Trykk på Kjør-knappen eller F5 for å kjøre denne koden og se utdataene i vinduet Umiddelbar utgang.

Excel VBA RegEx - eksempel # 3

Her vil du se hvordan du kan finne alle samsvarende mønstre i en streng ved å bruke RegEx.Execute.

Følg trinnene nedenfor for å bruke Excel VBA RegEx.

Trinn 1: Definer en ny delprosedyre for å legge til makroen.

Kode:

 Sub RegEx_Ex3 () Slutt Sub 

Trinn 2: Følg trinnene de samme som for de to foregående eksemplene for å definere et vanlig uttrykk og en variabel som kan inneholde strengverdien.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Slutt Sub 

Trinn 3: Sett inn et mønster som du ønsket å bli utført og matchet i den gitte strengen.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" End With End Sub 

Trinn 4: Bruk .GLOBAL = SANN, slik at alle kampene blir fanget i den gitte strengen.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With End Sub 

Trinn 5: Definer en streng etter End With som du må bruke Execute og finne alle samsvarende mønstre.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Endesub 

Trinn 6: Bruk nå kjør på variabelen som heter streng for å finne ut alle kampene som er knyttet til et gitt mønster.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Set matches = RegEx.Execute (Str) End Sub 

Trinn 7: Bruk For loop for å skrive ut verdien av alle matchede mønstre i det umiddelbare utskriftsvinduet.

Kode:

 Sub RegEx_Ex3 () Dim RegEx Som Objekt, Str Som Streng Sett RegEx = CreateObject ("VBScript.RegExp") Med RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Sett treff = RegEx.Execute (Str) for hver kamp I kampene Debug.Print Match.Value Neste kamp Slutt Sub 

Trinn 8: Kjør denne koden ved å trykke på F5 eller kjøre-knappen og se utdataene under det umiddelbare utgangsvinduet.

Denne koden skriver ut alt antall treff for mønsteret som er definert.

Ting å huske

  • VBA Regular Expression kan bare brukes til å finne ut strengene. For numeriske verdier trenger vi selvfølgelig ikke en slik funksjon. Alle de numeriske verdiene som er vurdert i hvert av de tre eksemplene ovenfor, er faktisk definert som en streng.
  • Excel VBA RegEx skal visstnok brukes til strengmanipulering når det er store data. Hvis du ikke bruker VBA RegEx, reduseres effektiviteten til programmet.
  • VBA RegEx mislykkes når det er scenarier der et mønster gjentar et antall ganger eller uendelige ganger for den skyld.

Anbefalte artikler

Dette har vært en guide til VBA RegEx. Her diskuterte vi hvordan du bruker Excel VBA RegEx sammen med noen praktiske eksempler og nedlastbar Excel-mal. Du kan også gå gjennom andre foreslåtte artikler -

  1. Hvordan bruke VBA Erstatt i Excel?
  2. Ved hjelp av Sett inn kommentar i Excel
  3. Opprette VBA TIMER i Excel
  4. Nested IF Formula in Excel

Kategori: