Tabela e përmbajtjes
Në këtë tutorial, do të kemi një vështrim të thellë se si të përdorim regex për të përputhur vargjet në Excel.
Kur të duhet të gjesh një vlerë të caktuar në një gamë e qelizave, do të përdorni funksionin MATCH ose XMATCH. Kur kërkoni për një varg specifik në një qelizë, funksionet FIND dhe SEARCH vijnë në ndihmë. Dhe si e dini nëse një qelizë përmban informacion që përputhet me një model të caktuar? Natyrisht, duke përdorur shprehje të rregullta. Por jashtë kutisë Excel nuk i mbështet regjimet! Mos u shqetësoni, ne do ta detyrojmë atë të :)
Funksioni Excel VBA Regex që të përputhet me vargjet
Siç është shumë e qartë nga titulli, në mënyrë që të përdorim shprehje të rregullta në Excel, ju duhet të krijoni funksionin tuaj. Fatmirësisht, VBA-ja e Excel-it ka një objekt të integruar RegExp , të cilin mund ta përdorni në kodin tuaj siç tregohet më poshtë:
Funksioni publik RegExpMatch(varg_inputi si varg, modeli si varg , rasti opsional match_case si Boolean = True ) Si Varianti Dim arRes() Si varg variant 'për ruajtjen e rezultateve Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Për sa kohë 'indeksi i rreshtit aktual në intervalin burimor, indeksi i kolonës aktuale në intervalin burimor, numri i rreshtave, numri i kolonat Në gabim Shkoni në ErrHandl RegExpMatch = arRes Vendos regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = model regex.Global = Regex e vërtetë.MultiLine = E vërtetë Nëse e vërtetë = rast_përputhje Pastaj regex.injorojë recetë = e vërtetë. fundshprehjet.Modeli : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b
Për të kuptuar më mirë se çfarë po ndodh këtu, le të hedhim një vështrim më të afërt në secilën pjesë :
- Emri i përdoruesit mund të përfshijë shkronja, numra, nënvizime, pika dhe viza. Duke pasur parasysh se \w përputhet me çdo shkronjë, shifër ose nënvizim, marrim regjimin e mëposhtëm: [\w\.\-]+
- Emri i domenit mund të përfshijë shkronja të mëdha dhe të vogla, shifra, viza (por jo në pozicionin e parë apo të fundit) dhe pikat (në rast të nënfushave). Meqenëse nënvizat nuk lejohen, në vend të \w ne po përdorim 3 grupe të ndryshme karakteresh: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
- Domeni i nivelit të lartë përbëhet nga një pikë e ndjekur nga shkronja të mëdha dhe të vogla. Mund të përmbajë nga 2 deri në 24 shkronja (TLD më e gjatë që ekziston aktualisht): \.[A-Za-z]{2,24}
Shënim. Modeli supozon se emri i domenit përmban 2 ose më shumë karaktere alfanumerike.
Me tekstin origjinal në A5 dhe modelin në A5, formula merr këtë formë:
=RegExpMatch(A5, $A$2)
Ose mund të përdorni një të rregullt më të thjeshtë shprehje për vërtetimin e emailit me një grup karakteresh të vogla ose të mëdha:
Modeli : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b
Por bëje formulën tënde të pandjeshme ndaj shkronjave të vogla:
=RegExpMatch(A5, $A$2, FALSE)
Formula Excel IF me përputhje regex
Për shkak të faktit se e integruar dhe e personalizuarfunksionet shkojnë mirë, nuk ka asgjë që do t'ju pengonte t'i përdorni ato së bashku në një formulë të vetme.
Për të kthyer ose llogaritur diçka nëse një shprehje e rregullt përputhet dhe diçka tjetër nëse nuk përputhet, futni RegExpMatch të personalizuar funksion në tekstin logjik të IF:
IF(RegExpMatch(…), [value_if_true], [value_if_false])Për shembull, nëse një varg në A5 përmban një adresë të vlefshme emaili, mund të ktheni "Po"; përndryshe "Jo".
=IF(RegExpMatch(A5, $A$2,), "Yes", "No")
Numëroni nëse regex përputhet
Për shkak se funksionet origjinale të Excel nuk mbështesin shprehjet e rregullta, është nuk është e mundur të vendoset një regex drejtpërdrejt në funksionin COUNTIS ose COUNTIFS. Fatmirësisht, ju mund ta imitoni këtë funksion duke përdorur funksionin tonë të personalizuar.
Si të supozojmë se keni përdorur një regex për të përputhur numrat e telefonit dhe për të nxjerrë rezultatet në kolonën B. Për të gjetur se sa qeliza përmbajnë numra telefoni, ju vetëm duhet për të numëruar vlerat TRUE në B5:B9. Dhe kjo mund të bëhet lehtësisht duke përdorur formulën standarde COUNTIF:
=COUNTIF(B5:B9, TRUE)
Nuk dëshironi ndonjë kolonë shtesë në fletën tuaj të punës? Nuk ka problem. Duke pasur parasysh se funksioni ynë i personalizuar mund të përpunojë disa qeliza në të njëjtën kohë dhe SUM-i i Excel-it mund të shtojë vlera në një grup, ja çfarë bëni:
- Furnizoni një referencë diapazoni te RegExpMatch, në mënyrë që të kthejë një grup vlerash TRUE dhe FALSE.
- Përdor një mohim të dyfishtë (--) për të detyruar vlerat logjike në ato dhezero.
- Merr funksionin SUM për të shtuar 1 dhe 0 në grupin që rezulton. me Ultimate Suite
Përdoruesit e Ultimate Suite mund të përdorin katër funksione të fuqishme Regex pa shtuar asnjë kod VBA në librat e tyre të punës pasi ato integrohen pa probleme në Excel gjatë instalimit të shtesës. Funksionet tona të personalizuara përpunohen nga motori standard .NET RegEx dhe mbështesin shprehjet e rregullta klasike me funksione të plota.
Si të përdorni funksionin e personalizuar RegexMatch
Duke supozuar se keni të instaluar versionin më të fundit të Ultimate Suite ( 2021.4 ose më vonë), mund të krijoni një formulë Regex Match në dy hapa të thjeshtë:
- Në skedën Ablebits Data , në grupin Text , klikoni Vegla Regex .
- Zgjidh vargjet burimore.
- Fut modelin tënd.
- Zgjidh opsionin Përputh .
- Për t'i pasur rezultatet si formula, jo si vlera, zgjidhni Fut si formulë kutinë e kontrollit.
- Klikoni butonin Përputh .
Një moment më vonë, funksioni AblebitsRegexMatch futet në një kolonë të re në të djathtë të të dhënave tuaja.
Në pamjen e mëposhtme të ekranit, funksioni kontrollon nëse vargjet në kolonën A përmbajnë 7 shifra numra apo jo.
Këshilla:
- Funksioni tion mund të futet direkt në një qelizë nëpërmjet kutisë standarde të dialogut Insert Function , ku kategorizohet nën AblebitsUDFs .
- Si parazgjedhje, një shprehje e rregullt shtohet në formulë, por mund ta mbani gjithashtu atë në një qeli të veçantë. Për këtë, thjesht përdorni një referencë qelize për argumentin e dytë.
- Si parazgjedhje, funksioni është ndjeshëm ndaj shkronjave të vogla . Për përputhjen e pandjeshme ndaj shkronjave, përdorni modelin (?i).
Për më shumë informacion, ju lutemi shihni funksionin AblebitsRegexMatch.
Kjo është se si të bëni përputhjen e shprehjeve të rregullta në Excel. Ju falënderoj që lexoni dhe mezi pres t'ju shohim në blogun tonë javën tjetër!
Shkarkimet e disponueshme
Shembuj të Excel Regex Match (skedari .xlsm)
Ultimate Suite 14- versioni plotësisht funksional i ditës (skedari .exe)
Nëse cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 Te cntInputCols, 1 Te cntInputCols) Për iInputCurRow = 1 Në cntInputRows Për iInputCurlsCol,RangeT, iInputCurlsurt = .Cells(iInputCurRow, iInputCurCol).Value) Tjetra Tjetra RegExpMatch = arRes Funksioni i daljes ErrHandl: RegExpMatch = CVERr(xlErrValue) Funksioni i FunditNgjisni kodin në redaktorin VBA dhe funksioni juaj i ri RegjpMatch gati për përdorim. Nëse nuk keni shumë përvojë me VBA, ky udhëzues mund të jetë i dobishëm: Si të futni kodin VBA në Excel.
Shënim. Pas futjes së kodit, mos harroni ta ruani skedarin tuaj si një libër pune i aktivizuar me makro (.xlsm).
Sintaksa RegExpMatch
Funksioni RegExpMatch kontrollon nëse ndonjë pjesë e vargut burimor përputhet me një shprehje të rregullt. Rezultati është një vlerë Boolean: TRUE nëse gjendet të paktën një përputhje, FALSE ndryshe.
Funksioni ynë i personalizuar ka 3 argumente - dy të parat janë të nevojshme dhe i fundit është opsional:
RegExpMatch(tekst , model, [match_case])Ku:
- Tekst (kërkohet) - një ose më shumë vargje për të kërkuar. Mund të ofrohet si referencë qelize ose diapazoni.
- Modeli (kërkohet) - shprehja e rregullt që përputhet. Kur vendoset drejtpërdrejt në një formulë, një model duhet të mbyllet në thonjëza të dyfishta.
- Match_case (opsionale) - përcakton përputhjenlloji. Nëse E VËRTETË ose është lënë jashtë (e parazgjedhur), kryhet përputhja e ndjeshme ndaj rasteve; nëse FALSE - nuk ka rëndësi të madhe.
Funksioni funksionon në të gjitha versionet e Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 dhe Excel 2010.
3 gjëra që ju duhet të dijë për RegExpMatch
Para se të arrijmë te llogaritjet praktike, ju lutemi vini re pikat e mëposhtme që sqarojnë disa aspekte teknike:
- Funksioni mund të përpunojë një qelizë të vetme ose gama e qelizave . Në rastin e fundit, rezultatet kthehen në qelizat fqinje në formën e një grupi dinamik ose diapazoni të derdhjes, siç tregohet në këtë shembull.
- Si parazgjedhje, funksioni është ndjeshëm ndaj shkronjave të vogla . Për të injoruar shkronjat e tekstit, vendosni argumentin përputhja_rasti në FALSE. Për shkak të kufizimeve të VBA Regexp, modeli i pandjeshëm ndaj shkronjave (?i) nuk mbështetet.
- Nëse nuk gjendet një model i vlefshëm, funksioni kthen FALSE; nëse modeli është i pavlefshëm , një #VALUE! ndodh gabim.
Më poshtë, do të gjeni disa shembuj të përputhjes regex që janë krijuar për qëllime demonstrimi. Ne nuk mund të garantojmë që modelet tona do të funksionojnë pa gabime me një gamë më të gjerë të dhënash hyrëse në fletët tuaja reale të punës. Përpara se të vini në prodhim, sigurohuni që të provoni dhe rregulloni modelet tona të mostrave sipas nevojave tuaja.
Si të përdorni regex për të përputhur vargjet në Excel
Kur të gjitha vargjet që dëshironi të përputhen kanë i njëjti model,shprehjet e rregullta janë një zgjidhje ideale.
Si të supozojmë se keni një sërë qelizash (A5:A9) që përmbajnë detaje të ndryshme për disa artikuj. Ju dëshironi të dini se cilat qeliza kanë SKU. Duke supozuar se çdo SKU përbëhet nga 2 shkronja të mëdha, një vizë dhe 3 shifra, ju mund t'i përputhni ato duke përdorur shprehjen e mëposhtme.
Modeli : \b[A-Z]{2}-\ d{3}\b
Ku [A-Z]{2} do të thotë çdo 2 shkronja të mëdha nga A në Z dhe \d{3} do të thotë çdo 3 shifër nga 0 në 9. Karakteri \b tregon një fjalë kufiri, që do të thotë se një SKU është një fjalë e veçantë dhe jo pjesë e një vargu më të madh si p.sh. 23-MAR-2022.
Me modelin e vendosur, ne mund të kalojmë në shkrimin e një formule. Në thelb, përdorimi i një funksioni të personalizuar nuk është i ndryshëm nga ai vendas. Sapo të filloni të shkruani një formulë, emri i funksionit do të shfaqet në listën e sugjeruar nga AutoComplete e Excel. Megjithatë, ka disa nuanca në Excel-in Dynamic Array (Microsoft 365 dhe Excel 2021) dhe Excel-in tradicional (2019 dhe versionet më të vjetra).
Përputhni vargun në një qelizë
Për të përputhur një varg në një qelizë të vetme, referojuni asaj qelize në argumentin e parë. Argumenti i dytë supozohet të përmbajë një shprehje të rregullt.
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Modeli gjithashtu mund të mbahet në një qelizë të paracaktuar, e cila është e kyçur me një referencë absolute ($A$2):
=RegExpMatch(A5, $A$2)
Pas futjes së formulës në qelizën e parë, mund ta tërhiqni poshtë në të gjitha rreshtat e tjerë.
Kjo metodëfunksionon bukur në të gjitha versionet e Excel .
Përputhni vargjet në disa qeliza njëherësh
Për të përputhur vargje të shumta me një formulë të vetme, përfshini një referencë intervali në argumentin e parë:
=RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")
Në Excel 365 dhe Excel 2021 që mbështesin vargje dinamike, funksionon në këtë mënyrë - ju shkruani formulën në qelizën e parë, shtypni Enter dhe formula automatikisht derdhet në qelizat e mëposhtme.
Në Excel 2019 dhe më herët, ajo funksionon vetëm si një formulë tradicionale e grupit CSE, e cila futet në një gamë qelizash dhe plotësohet duke shtypur së bashku tastet Ctrl + Shift + Enter.
Regex për të përputhur numrin
Për të përputhur çdo shifër të vetme nga 0 në 9, përdorni karakterin \d në regex. Në varësi të detyrës suaj të veçantë, shtoni një sasior të përshtatshëm ose krijoni një model më kompleks.
Regex për të përputhur çdo numër
Për të përputhur çdo numër të çdo gjatësie, vendosni sasinë + menjëherë pas / karakteri d, i cili thotë të kërkoni numra që përmbajnë 1 ose më shumë shifra.
Modeli : \d+
=RegExpMatch(A5:A9, "\d+")
Regex për të përputhur numrin me gjatësi specifike
Nëse qëllimi juaj është të përputhni vlerat numerike që përmbajnë një numër të caktuar shifrash, atëherë përdorni \d së bashku me një sasior të përshtatshëm.
Për shembull, për të përputhur numrat e faturave që përbëhen nga saktësisht 7 shifra, do të përdorni \d{7}. Sidoqoftë, mbani në mend se do të përputhet me 7siç pritej:
Shënime:
- Kodet ndërkombëtare nuk janë kontrolluar, kështu që mund të jenë ose jo të pranishëm.
- Në shprehjet e rregullta, \s qëndron për çdo karakter të hapësirës së bardhë, si p.sh. hapësira, skeda, kthimi i karrocës ose rreshti i ri. Për të lejuar vetëm hapësira, përdorni [-\. ] në vend të [-\.\s].
- [^13] do të përputhet me çdo karakter të vetëm që nuk është 1 ose 3.
- [^1-3] do të përputhet me çdo karakter të vetëm që nuk është 1, 2 ose 3 (d.m.th. çdo shifër nga 1 në 3).
- Regex-i i mësipërm funksionon vetëm për vargjet me një rresht . Në rastin e vargjeve milti-line, karakteret ^ dhe $ përputhen me fillimin dhe fundin e çdo rreshti në vend të fillimit dhe fundit të vargut të hyrjes, prandaj regex kërkon vetëm në rreshtin e parë.
- Për të përputhur vargjet që nuk fillojnë me tekst të caktuar , përdorni një shprehje të rregullt si p.sh. ^(?! limon).*$
- Për të përputhur vargjet që nuk përfundojnë me tekst të caktuar , përfshinivargu fundor ankorohet në modelin e kërkimit: ^((?!lemons$).)*$
Regex për të NUK përputhet karakteri
Për të gjetur vargje që NUK përmbajnë një karakter të caktuar, mund të përdorni klasa të mohuara të karaktereve [^ ] që përputhen çdo gjë JO në kllapa. Për shembull:
Në një listë numrash telefoni, supozoni se dëshironi të gjeni ata që nuk kanë një kod shteti. Duke pasur parasysh se çdo kod ndërkombëtar përfshin shenjën +, mund të përdorni klasën e karaktereve [^\+] për të gjetur vargje që nuk përmbajnë shenjë plus. Është e rëndësishme të kuptohet se shprehja e mësipërme përputhet me çdo karakter të vetëm që nuk është +. Për shkak se një numër telefoni mund të jetë kudo në një varg, jo domosdoshmërisht në fillim, sasia * shtohet për të kontrolluar çdo karakter pasues. Anchors fillimi ^ dhe fundi $ sigurojnë që i gjithë vargu të përpunohet. Si rezultat, marrim shprehjen e rregullt më poshtë që thotë "mos përputh karakterin + në asnjë pozicion në varg".
Modeli :^[^\+]*$
=RegExpMatch(A5, "^[^\+]*$")
Regex për të NUK përputhet vargun
Megjithëse nuk ka sintaksë të veçantë të shprehjes së rregullt për që nuk përputhet me një varg specifik, mund ta imitoni këtë sjellje duke përdorur një parashikim negativ.
Supozojmë se dëshironi të gjeni vargje që nuk përmbajnë fjalën "limon". Kjo shprehje e rregullt do të funksionojë mirë:
Modeli : ^((?! limonët).)*$
Natyrisht, këtu nevojitet një shpjegim. Shikimi negativ (?! limonët) shikon në të djathtë për të parë nëse nuk ka fjalë "limon" përpara. Nëse "limonët" nuk janë aty, atëherë pika përputhet me çdo karakter përveç një ndërprerjeje rreshti. Shprehja e mësipërme kryen vetëm një kontroll dhe sasia * e përsërit atë zero ose më shumë herë, nga fillimi i vargut të ankoruar nga ^ deri në fund të vargut të ankoruar nga $.
Për të injoruar rastin e tekstit, ne vendosëm argumentin e tretë në FALSE për ta bërë funksionin tonë të pandjeshëm ndaj shkronjave të vogla:
=RegExpMatch(A5, $A$2, FALSE)
Këshilla dhe shënime:
Përputhja e pandjeshme ndaj shkronjave
Në shprehjet e rregullta klasike, ekziston një model i veçantë për Përputhja e pandjeshme ndaj shkronjave (?i), e cila nuk mbështetet në VBA RegExp. Për të kapërcyer këtë kufizim, funksioni ynë i personalizuar pranon argumentin e tretë opsional të quajtur match_case . Për të bërë përputhjen e pandjeshme ndaj shkronjave, thjesht vendoseni në FALSE.
Le të themi se dëshironi të identifikoni data si 1-Mars-22 ose 01-MAR-2022. Për të përputhur formatet dd-mmm-vvvv dhe d-mmm-vvv , ne po përdorim shprehjen e rregullt të mëposhtme.
Modeli : \b\d{1,2}-(janarshifra kudo në varg duke përfshirë një numër 10-shifror ose 100-shifror. Nëse kjo nuk është ajo që po kërkoni, vendosni kufirin e fjalës \b në të dyja anët.
Modeli : \b\d{7}\b
=RegExpMatch(A5:A9, "\b\d{7}\b")
Regex për të përputhur numrat e telefonit
Meqenëse numrat e telefonit mund të shkruhen në formate të ndryshme, përputhja e tyre kërkon një shprehje të rregullt më të sofistikuar.
Në grupin e mëposhtëm të të dhënave, ne do të kërkojmë për numra 10-shifrorë që kanë 3 shifra në 2 grupet e para dhe 4 shifra në grupin e fundit. Grupet mund të ndahen me pikë, vizë ose hapësirë. Grupi i parë mund ose nuk mund të mbyllet në kllapa.
Modeli: (\(\d{3}\)