VBA RegEx
VBA RegEx “Regular Expression” je zelo uporaben v programskem svetu, ki ga lahko uporabimo za preverjanje vnosa spletnega mesta, iskanje besednih vzorcev v velikem nizu / besedilu, za iskanje in nadomeščanje nizov
Večina nas uporablja FIND, SUBSTITUTE, LEVO, DESNO in funkcije MID za manipulacijo z vrsticami v programu Microsoft Excel, kajne? Vendar imajo te funkcije svoje omejitve, ki jih ni mogoče široko uporabljati. Poznavanje VBA regularnih izrazov vam bo prihranilo veliko časa v vašem vsakodnevnem življenju. Redni izrazi so v VBA oblikovani kot „RegEx“ (ali Regex). V tej vadnici si bomo ogledali nekatere RegEx z njihovo uporabo.
Lahko uporabite objekt VBA RegEx, ki je že ustvarjen v Microsoftovi knjižnici regularnih izrazov VBScript. Po tej knjižnici se lahko pomikate s klikom na Orodja - Reference - Microsoft VBScript Regular Expressions.
Predmet RegEx lahko ustvarite tudi s funkcijo CreateObject v VBA. Zdi se bolj priročen način, saj vam v tem primeru ni treba vedno sklicevati na knjižnico VBScript Regular Expressions.
Glej kodo spodaj:
Dim regex kot nastavitev predmeta regex = CreateObject ("VBScript.RegExp")
Ta koda vam bo omogočila ustvarjanje in dostop do RegEx predmetov v vašem makro. Osebno mi je bolj všeč ta način kot prvi zaradi njegove togosti.
Funkcija RegEx omogoča manipuliranje z naslednjim v dolgem nizu.
- Divje karte kot *, ? itd.
- Združeni izrazi skupaj z nadomestnimi kartami.
RegEx ima spodaj parametre / lastnosti:
- Vzorec - Vzorec, opredeljen v RegExu, na katerem želite izvajati operacije.
- IgnoreCase - Prezri črko črk (Caps / Non-Caps so enake v nizu).
- Globalno - Omogoča iskanje vseh možnih ujemanj, če je nastavljeno na TRUE. Če je nastavljeno kot FALSE, poišče samo prvo ujemanje.
- MultiLine - Omogoča ujemanje vzorca v nizu, ki je razporejen po več vrsticah.
RegEx omogoča naslednje tri operacije:
- Test - Preizkusi, ali je omenjeni vzorec prisoten v nizu ali ne. Če je prisoten, vrne TRUE, sicer LAHKO.
- Zamenjaj - zamenja originalni vzorec z drugim.
- Execute - Vrne vse iskane vzorce.
Kako uporabljati Excel VBA RegEx?
Spoznali bomo, kako uporabljati Excel VBA Regular Expression z nekaj primeri.
To predlogo VBA RegEx Excel lahko prenesete tukaj - Predloga VBA RegEx ExcelExcel VBA RegEx - primer 1
Tu boste preverili, ali je omenjeni vzorec v besedilu prisoten z uporabo RegEx.Test.
Sledite spodnjim korakom za uporabo VBA RegEx.
1. korak: Določite nov podproces za ustvarjanje makra.
Koda:
Sub RegEx_Ex1 () End Sub
2. korak: Določite dve spremenljivki RegEx kot objekt, ki ga lahko uporabite za ustvarjanje predmeta RegEx in Str kot niz.
Koda:
Sub RegEx_Ex1 () Dim RegEx kot objekt, Str kot String End Sub
3. korak: Ustvarite objekt RegEx s funkcijo CreateObject.
Koda:
Sub RegEx_Ex1 () Dim RegEx kot predmet, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") End Sub
4. korak: Dodajte vzorec, ki ga želite preizkusiti s funkcijo RegEx.
Koda:
Pod RegEx_Ex1 () Dim RegEx kot predmet, Str kot niz nastavljen RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "(0-9) +" End with End Sub
5. korak: Določite niz, znotraj katerega moramo preveriti dani vzorec.
Koda:
Pod RegEx_Ex1 () Dim RegEx kot predmet, Str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "(0-9) +" End with Str = "Moja številka kolesa je MH-12 PP- 6145 "Končni pod
6. korak: Uporabite RegEx.Test, da preverite, ali je dani vzorec znotraj spremenljivke z imenom Str. Uporabite tudi Debug.Print, da rezultat izpišete (True ali False) v neposrednem oknu.
Koda:
Pod RegEx_Ex1 () Dim RegEx kot predmet, Str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "(0-9) +" End with Str = "Moja številka kolesa je MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub
7. korak: Pritisnite tipko F5 ali Run in zaženite kodo in si oglejte izhod. (Pritisnite CTRL + G, da odprete takojšnje okno)
Tu smo ustvarili objekt RegEx. Nato smo z VBA RegEx preverili, ali je v nizu, določenem s pomočjo RegEx.Test, prisoten dani vzorec ("(0-9) +"), ki vključuje vsa števila / kombinacije števil od 0 do 9 ( Str). Izhod "True" v neposrednem oknu kaže, da je vzorec "(0-9) +" v danem nizu.
Excel VBA RegEx - primer # 2
Tukaj boste videli, kako lahko en niz zamenjate z drugim z RegEx.Replace.
Sledite spodnjim korakom za uporabo VBA RegEx.
1. korak: Določite nov podvrstico za ustvarjanje makra.
Koda:
Sub RegEx_Ex2 () End Sub
2. korak: Enako kot v prvem primeru definirajte dve spremenljivki RegEx kot objekt, ki lahko vsebuje vrednost predmeta RegEx in Str, ki bo vseboval vrednost niza, ki ga boste definirali.
Koda:
Sub RegEx_Ex2 () Dim RegEx kot predmet, Str kot String End Sub
3. korak: Določite objekt RegEx in ga nastavite na spremenljivko RegEx s funkcijo CreateObject.
Koda:
Sub RegEx_Ex2 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") End Sub
4. korak: Vstavite vzorec, ki ga želite zamenjati s funkcijo .Pattern.
Koda:
Pod RegEx_Ex2 () Dim RegEx kot predmet, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123" konec z konec Sub
5. korak: Uporabite .GLOBAL = TRUE, ki, če TRUE dovoli zamenjavo vseh ujemajočih se vzorcev v danem nizu. Če FALSE nadomesti samo prvi ujemajoči se vzorec.
Koda:
Pod RegEx_Ex2 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123" .Global = True 'Če je FALSE, zamenja prvi prvi ujemajoči niz' End with End Sub
6. korak: Ko končate z, določite niz, s katerim se želite ujemati, in nadomestite vzorec.
Koda:
Pod RegEx_Ex2 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123" .Global = True 'Če je FALSE, zamenja prvi prvi ujemajoči niz' End with Str = "123-654-000-APY-123-XYZ-888" Konec Pod
6. korak: Uporabite RegEx.Replace, da vrednost vzorca v danem nizu zamenjate z drugim besedilom.
Koda:
Pod RegEx_Ex2 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123" .Global = True 'Če je FALSE, zamenja prvi prvi ujemajoči niz' End with Str = Odpravljanje napak "123-654-000-APY-123-XYZ-888". Natisni RegEx.Replace (Str, "zamenjana") End Sub
Tu smo želeli, da bi vzorec "123" zamenjal kakšen drug kos vrvice. RegEx.Replace omogoča nadomestitev vrednosti vzorca s kosom niza (definirali smo "nadomeščen"). Oglejte si tudi .Global = TRUE. Kar je pogojna izjava. Če je Global = TRUE, funkcija Zamenjaj nadomesti vse ujemajoče se vzorce z drugim nizom. Če je GLOBAL = FALSE, funkcija Zamenjava nadomesti samo prvi ujemajoči se vzorec, ostale pa so zapostavljene.
7. korak: Pritisnite gumb Zaženi ali F5, da zaženete to kodo in si ogledate izhod v oknu s takojšnjim izhodom.
Excel VBA RegEx - primer # 3
Tu boste videli, kako lahko z RegEx.Execute najdete vse ujemajoče se vzorce v nizu.
Za uporabo Excel VBA RegEx sledite spodnjim korakom.
1. korak: Določite nov podproces za dodajanje makra.
Koda:
Sub RegEx_Ex3 () End Sub
Korak 2: Sledite korakom, enakim kot prejšnja dva primera, da določite regularni izraz in spremenljivko, ki lahko vsebuje vrednost niza.
Koda:
Sub RegEx_Ex3 () Dim RegEx kot predmet, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") End Sub
3. korak: V dani niz vstavite vzorec, ki ga želite izvesti in se ujemate.
Koda:
Pod RegEx_Ex3 () Dim RegEx kot objekt, Str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123-XYZ" End with End Sub
4. korak: Uporabite .GLOBAL = TRUE, da bodo vsa ujemanja zajeta v danem nizu.
Koda:
Pod RegEx_Ex3 () Dim RegEx kot predmet, Str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123-XYZ" .Global = True End s koncem Sub
5. korak: Določite niz po koncu, s katerim morate uporabiti Execute in poiskati vse ujemajoče se vzorce.
Koda:
Pod RegEx_Ex3 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123-XYZ" .Global = True End with Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Konec pod
6. korak: Zdaj uporabite Execute v spremenljivki z imenom string, da ugotovite vsa ujemanja, povezana z določenim vzorcem.
Koda:
Pod RegEx_Ex3 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123-XYZ" .Global = True End with Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Nastavi ujemanje = RegEx.Execute (Str) End Sub
7. korak: Z uporabo zanke natisnite vrednost vseh ujemajočih se vzorcev v neposredno izhodno okno.
Koda:
Pod RegEx_Ex3 () Dim RegEx kot objekt, str kot niz nizov RegEx = CreateObject ("VBScript.RegExp") z RegEx .Pattern = "123-XYZ" .Global = True End with Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Nastavite tekme = RegEx.Execute (Str) za vsako tekmo v tekmah Debug.Print Match.Value Naslednja tekma End Sub
8. korak: Zaženite to kodo s pritiskom na tipko F5 ali zaženite in v neposrednem izhodnem oknu si oglejte izhod.
Ta koda natisne vse število zadetkov za določen vzorec.
Stvari, ki jih je treba zapomniti
- VBA Regular Expression lahko uporabite le za iskanje strun. Očitno za numerične vrednosti take funkcije ne potrebujemo. Vse numerične vrednosti, obravnavane v vsakem od treh zgornjih primerov, so dejansko definirane kot niz.
- Excel VBA RegEx naj bi se uporabljal za manipulacijo z nizi, kadar je veliko podatkov. Če ne uporabljate VBA RegEx, zmanjšuje učinkovitost programa.
- VBA RegEx ne uspe, kadar obstajajo scenariji, v katerih se vzorec ponavlja n-krat ali neskončno krat.
Priporočeni članki
To je vodnik za VBA RegEx. Tu smo razpravljali o tem, kako uporabljati Excel VBA RegEx, skupaj z nekaj praktičnimi primeri in naloženo predlogo Excela. Ogledate si lahko tudi druge naše predlagane članke -
- Kako uporabljati zamenjavo VBA v Excelu?
- Uporaba Vstavi komentar v Excelu
- Ustvarjanje VBA TIMER-a v Excelu
- Vstavljena IF formula v Excelu