VBA RegEx
VBA RegEx “Regular Expression” je vrlo koristan u svijetu programiranja koji se može koristiti za provjeru unosa web stranica, pretraživanje uzoraka riječi u velikom nizu / tekstu, za pretraživanje i zamjenu niza.
Većina nas koristi FIND, SUBSTITUTE, LEFT, Right, zajedno s MID funkcijama za manipulaciju nizom u programu Microsoft Excel, zar ne? Međutim, ove funkcije imaju svoja ograničenja koja se ne mogu široko koristiti. Poznavanje VBA regularnih izraza uštedjet će vam puno vremena u svakodnevnom životu. Regularni izrazi su u VBA kratki kao "RegEx" (ili Regex). U ovom ćemo udžbeniku pogledati neke od RegEx-a uz njihovu upotrebu.
Možete koristiti VBA RegEx objekt koji je već stvoren u Microsoft VBScript knjižici regularnih izraza. Možete upravljati ovom bibliotekom klikom na Alati - Reference - Microsoft VBScript regularni izrazi.
Također možete stvoriti RegEx objekt pomoću CreateObject funkcije u VBA. Čini se prikladnijim načinom jer se u tom slučaju ne morate uvijek pozivati na VBScript knjižicu regularnih izraza.
Pogledajte kôd u nastavku:
Dim regex kao skup objekta regex = CreateObject ("VBScript.RegExp")
Ovaj će vam kôd omogućiti stvaranje i pristup RegEx objektima u vašoj makronaredbi. Osobno mi je draži ovaj način nad prvim zbog njegove krutosti.
Funkcija RegEx omogućuje manipuliranje sljedećim u dugom nizu.
- Divlje kartice poput *, ? itd
- Grupirani izrazi zajedno s divljim kartama.
RegEx ima ispod parametara / svojstava:
- Uzorak - obrazac definiran u RegExu na kojem želite raditi operacije.
- IgnoreCase - Zanemarite velika slova (Caps / Non-Caps su isti u nizu).
- Global - Omogućuje pronalaženje svih mogućih podudaranja ako je postavljeno na TRUE. Ako je postavljeno kao FALSE, ono će naći samo prvo podudaranje.
- MultiLine - Omogućuje podudaranje uzorka u nizu koji se širi duž više linija.
RegEx olakšava sljedeće tri operacije:
- Test - Testira je li navedeni uzorak prisutan u nizu ili ne. Ako je prisutan, vraća se TRUE, u suprotnom FALSE.
- Zamijeni - zamjenjuje izvorni uzorak drugim.
- Execute - Vraća sve pretraživane podudarne uzorke.
Kako se koristi Excel VBA RegEx?
Naučit ćemo kako koristiti Excel VBA Regular Expression s nekoliko primjera.
Možete preuzeti ovaj VBA RegEx Excel predložak ovdje - VBA RegEx Excel predložakExcel VBA RegEx - Primjer # 1
Ovdje ćete provjeriti je li spomenuti uzorak prisutan u tekstu pomoću RegEx.Test.
Slijedite dolje navedene korake za upotrebu VBA RegEx-a.
Korak 1: Definirajte novi podpostupak za stvaranje makronaredbe.
Kodirati:
Sub RegEx_Ex1 () Kraj Sub
Korak 2: Definirajte dvije varijable RegEx kao objekt koji se može koristiti za stvaranje RegEx objekta, a Str kao niz.
Kodirati:
Sub RegEx_Ex1 () Dim RegEx kao objekt, Str kao String End Sub
Korak 3: Stvorite objekt RegEx pomoću funkcije CreateObject.
Kodirati:
Sub RegEx_Ex1 () Dim RegEx kao objekt, Str kao niz string RegEx = CreateObject ("VBScript.RegExp") Kraj Sub
Korak 4: Dodajte obrazac za testiranje s RegEx funkcijom.
Kodirati:
Sub RegEx_Ex1 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with End Sub
Korak 5: Definirajte niz unutar kojeg trebamo provjeriti zadani uzorak.
Kodirati:
Sub RegEx_Ex1 () Dim RegEx kao objekt, Str kao string string Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with Str = "Moj bicikl broj je MH-12 PP- 6145 "Kraj Sub
Korak 6: Upotrijebite RegEx.Test za provjeru da li je navedeni uzorak prisutan u varijabli nazvanoj Str. Također koristite Debug.Print za ispis rezultata (True ili False) na neposrednom prozoru.
Kodirati:
Sub RegEx_Ex1 () Dim RegEx kao objekt, Str kao string string Set RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "(0-9) +" End with Str = "Moj bicikl broj je MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) Kraj Sub
Korak 7: Pritisnite tipku F5 ili Run da biste pokrenuli kod i pogledali izlaz. (Pritisnite CTRL + G za otvaranje neposrednog prozora)
Ovdje smo stvorili RegEx objekt. Zatim smo pomoću VBA RegEx-a provjerili je li dan uzorak ("(0-9) +") koji uključuje sve brojeve / kombinaciju brojeva od 0 do 9 u nizu definiranom pomoću RegEx.Test ( Str). Izlaz "True" ispod neposrednog prozora pokazuje da je u određenom nizu prisutan uzorak "(0-9) +".
Excel VBA RegEx - Primjer # 2
Ovdje ćete vidjeti kako jedan niz možete zamijeniti drugim koristeći RegEx.Replace.
Slijedite dolje navedene korake za upotrebu VBA RegEx-a.
1. korak: definirajte novi pod string da biste stvorili makronaredbu.
Kodirati:
Sub RegEx_Ex2 () Kraj Sub
Korak 2: Isto kao u prvom primjeru, definirajte dvije varijable RegEx kao objekt koji može sadržavati vrijednost objekta RegEx i Str koji će sadržavati vrijednost niza koji ćete definirati.
Kodirati:
Sub RegEx_Ex2 () Dim RegEx kao objekt, Str kao String End Sub
Korak 3: Definirajte RegEx objekt i postavite ga na RegEx varijablu pomoću funkcije CreateObject.
Kodirati:
Sub RegEx_Ex2 () Dim RegEx kao objekt, Str kao niz string RegEx = CreateObject ("VBScript.RegExp") Kraj Sub
Korak 4: Umetnite uzorak koji želite zamijeniti pomoću .Pattern funkcije.
Kodirati:
Sub RegEx_Ex2 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" Završi s krajnjim Sub
Korak 5: Koristite .GLOBAL = TRUE koji ako TRUE dopušta zamjenu svih odgovarajućih obrazaca u određenom nizu. Ako FALSE zamjenjuje samo prvi odgovarajući obrazac.
Kodirati:
Pod RegEx_Ex2 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ako je FALSE, zamjenjuje samo prvi odgovarajući niz' End with End Sub
Korak 6: Nakon kraja sa, definirajte niz s kojim želite uskladiti i zamijenite uzorak.
Kodirati:
Sub RegEx_Ex2 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ako je FALSE, zamjenjuje samo prvi odgovarajući niz' End with Str = "123-654-000-APY-123-XYZ-888" Kraj Sub
Korak 6: Upotrijebite RegEx.Replace da vrijednost obrasca u danom nizu zamijenite drugim tekstom.
Kodirati:
Sub RegEx_Ex2 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123" .Global = True 'Ako je FALSE, zamjenjuje samo prvi odgovarajući niz' End with Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Zamijenjeno") Kraj Sub
Ovdje smo htjeli da uzorak „123” zamijeni nekim drugim komadićem niza. RegEx.Replace omogućuje zamjenu vrijednosti uzorka s komadom niza (definirali smo "Zamijenjeno"). Molimo pogledajte i .Global = TRUE. Što je uvjetna izjava. Ako je Global = TRUE, funkcija Zamijeni zamjenjuje sve podudarajuće uzorke drugim nizom. Ako je GLOBAL = FALSE, funkcija Zamijeni zamjenjuje samo prvi odgovarajući obrazac, a ostali su zanemareni.
Korak 7: Pritisnite tipku Run ili F5 da biste pokrenuli ovaj kod i pogledali izlaz u prozoru neposrednog izlaza.
Excel VBA RegEx - Primjer # 3
Ovdje ćete vidjeti kako možete pronaći sve odgovarajuće obrasce u nizu pomoću RegEx.Execute.
Slijedite dolje navedene korake za upotrebu Excela VBA RegEx.
Korak 1: Definirajte novi podpostupak za dodavanje makronaredbe.
Kodirati:
Sub RegEx_Ex3 () Kraj Sub
Korak 2: Slijedite korake iste kao u prethodna dva primjera za definiranje regularnog izraza i varijable koja može sadržavati vrijednost niza.
Kodirati:
Sub RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz string RegEx = CreateObject ("VBScript.RegExp") Kraj Sub
Korak 3: Umetnite uzorak koji želite da bude izveden i podudarite u zadanom nizu.
Kodirati:
Sub RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" Završi s End Sub
Korak 4: Upotrijebite .GLOBAL = TRUE kako bi se sva podudaranja snimila u zadanom nizu.
Kodirati:
Sub RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End sa krajnjim Sub
Korak 5: Definirajte niz nakon kraja sa kojim trebate koristiti Execute i pronaći sve odgovarajuće obrasce.
Kodirati:
Pod RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz stringova RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Kraj Sub
Korak 6: Sada upotrijebite Execute na varijabli imenovanoj nizu da biste saznali sva podudaranja povezana s danim uzorkom.
Kodirati:
Pod RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz stringova RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Postavi podudaranje = RegEx.Execute (Str) End Sub
Korak 7: Upotrijebite za petlju za ispis vrijednosti svih podudarnih uzoraka u neposredni izlazni prozor.
Kodirati:
Sub RegEx_Ex3 () Dim RegEx kao objekt, Str kao niz stringa RegEx = CreateObject ("VBScript.RegExp") s RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Postavi podudaranje = RegEx.Execute (Str) za svako podudaranje u utakmicama Debug.Print Match.Value Sljedeća utakmica End Sub
Korak 8: Pokrenite ovaj kôd pritiskom na F5 ili Run gumb i pogledajte izlaz u neposrednom izlaznom prozoru.
Ovaj kôd ispisuje sav broj podudaranja za uzorak koji je definiran.
Stvari koje treba zapamtiti
- VBA Regular Expression može se koristiti samo za pronalaženje struna. Očito za numeričke vrijednosti ne treba nam takva funkcija. Sve numeričke vrijednosti koje se razmatraju u sva tri gore navedena primjera zapravo su definirane kao niz.
- Excel VBA RegEx trebao bi se koristiti za nizanje manipulacija kad god postoje veliki podaci. Ako se ne koristi VBA RegEx, smanjuje se učinkovitost programa.
- VBA RegEx ne uspije kada postoje scenariji u kojima se uzorak ponavlja n broj puta ili beskonačno vremena u tu svrhu.
Preporučeni članci
Ovo je vodič za VBA RegEx. Ovdje smo raspravljali o tome kako koristiti Excel VBA RegEx zajedno s nekoliko praktičnih primjera i preuzeti Excel predložak. Možete i pregledati naše druge predložene članke -
- Kako se koristi Excel VBA u Excelu?
- Korištenje Insert Comment u Excelu
- Izrada VBA TIMER-a u Excelu
- Ugrađena IF formula u Excelu