Efnisyfirlit
Í þessari kennslu munum við skoða ítarlega hvernig á að nota regex til að passa saman strengi í Excel.
Þegar þú þarft að finna ákveðið gildi á bili af frumum, myndirðu nota MATCH eða XMATCH aðgerðina. Þegar leitað er að ákveðnum streng í reit koma FIND og SEARCH aðgerðirnar að góðum notum. Og hvernig veistu hvort klefi inniheldur upplýsingar sem passa við ákveðið mynstur? Vitanlega, með því að nota reglulegar orðasambönd. En útúr kassanum Excel styður ekki regexes! Engar áhyggjur, við neyðum það til :)
Excel VBA Regex fall til að passa við strengi
Eins og það er nokkuð ljóst af fyrirsögninni, til að nota reglulegar segðir í Excel þarftu að búa til þína eigin aðgerð. Sem betur fer hefur VBA í Excel innbyggðan RegExp hlut, sem þú getur notað í kóðanum þínum eins og sýnt er hér að neðan:
Public Function RegExpMatch(inntakssvið sem svið, mynstur sem strengur , valfrjálst match_case As Boolean = True ) As Variant Dim arRes() As Variant 'fylki til að geyma niðurstöðurnar Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'vísitala núverandi línu í upprunasviði, vísitala núverandi dálks í upprunasviði, fjöldi lína, fjöldi af dálkar On Error GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ("VBScript.RegExp" ) regex.pattern = mynstur regex.Global = True regex.MultiLine = True If True = match_case Þá regex.ignorecase = False Annað regex. Endatjáningar.Mynstur : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b
Til að skilja betur hvað er að gerast hér skulum við skoða hvern hluta nánar. :
- Notandanafn getur innihaldið bókstafi, tölustafi, undirstrik, punkta og bandstrik. Með því að hafa í huga að \w passar við hvaða staf, tölustaf eða undirstrik sem er, fáum við eftirfarandi regex: [\w\.\-]+
- Lénsnafn getur innihaldið hástafi og lágstafi, tölustafir, bandstrik (en ekki í fyrstu eða síðustu stöðu) og punktar (ef um undirlén er að ræða). Þar sem undirstrik er ekki leyfð, þá erum við að nota 3 mismunandi stafasett í stað \w: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
- Efsta lén samanstendur af punkti sem fylgt er eftir af hástöfum og lágstöfum. Það getur innihaldið frá 2 til 24 stafi (lengsta TLD sem nú er til): \.[A-Za-z]{2,24}
Athugið. Mynstrið gerir ráð fyrir að lénið innihaldi 2 eða fleiri tölustafi.
Með upprunalega textanum í A5 og mynstrinu í A5 tekur formúlan þessa lögun:
=RegExpMatch(A5, $A$2)
Eða þú gætir notað einfaldari venjulegan tjáning fyrir staðfestingu tölvupósts með annað hvort lágstöfum eða hástöfum stafasettu:
Mynstur : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b
En gerðu formúluna þína ónæmir fyrir hástöfum:
=RegExpMatch(A5, $A$2, FALSE)
Excel IF formúla með samsvarandi regex
Vegna þess að innbyggð og sérsniðinaðgerðir fara vel saman, það er ekkert sem kemur í veg fyrir að þú notir þær saman í einni formúlu.
Til að skila eða reikna eitthvað ef venjuleg segð er samsvörun og eitthvað annað ef það er ekki samsvörun, felldu inn sérsniðna RegExpMatch fall í rökréttum texta IF:
IF(RegExpMatch(…), [value_if_true], [value_if_false])Til dæmis, ef strengur í A5 inniheldur gilt netfang geturðu skilað „Já“; annars "Nei".
=IF(RegExpMatch(A5, $A$2,), "Yes", "No")
Teldu ef regex er samsvarað
Vegna þess að innbyggðar Excel aðgerðir styðja ekki reglulegar segðir, er það ekki hægt að setja regex beint í COUNTIS eða COUNTIFS fallið. Sem betur fer geturðu líkt eftir þessari virkni með því að nota sérsniðna aðgerðina okkar.
Svo sem þú hefur notað regex til að passa við símanúmer og birta niðurstöðurnar í dálki B. Til að komast að því hversu margar frumur innihalda símanúmer þarftu bara að telja SÖNN gildin í B5:B9. Og það er auðvelt að gera með því að nota staðlaða COUNTIF formúluna:
=COUNTIF(B5:B9, TRUE)
Viltu enga auka dálka í vinnublaðinu þínu? Ekkert mál. Með því að hafa í huga að sérsniðna aðgerðin okkar getur unnið úr mörgum frumum í einu og SUMMA Excel getur lagt saman gildi í fylki, þetta er það sem þú gerir:
- Gefðu sviðstilvísun í RegExpMatch, svo það skilar fylki af TRUE og FALSE gildum.
- Notaðu tvöfalda afneitun (--) til að þvinga rökrétt gildi til einna ognúll.
- Fáðu SUM fallið til að leggja saman 1 og 0 í fylkinu sem myndast.
=SUM(--RegExpMatch(A5:A9, $A$2))
Regex samsvörun með Ultimate Suite
Notendur Ultimate Suite okkar geta nýtt sér fjórar öflugar Regex-aðgerðir án þess að bæta neinum VBA kóða við vinnubækur sínar þar sem þær eru vel samþættar í Excel meðan á viðbótinni stendur. Sérsniðnar aðgerðir okkar eru unnar af stöðluðu .NET RegEx vélinni og styðja fullkomnar klassískar reglubundnar tjáningar.
Hvernig á að nota sérsniðna RegexMatch aðgerð
Að því gefnu að þú hafir nýjustu útgáfuna af Ultimate Suite uppsetta ( 2021.4 eða nýrri), getur þú búið til Regex Match formúlu í tveimur einföldum skrefum:
- Á flipanum Ablebits Data , í Texti hópnum, smelltu á Regex Tools .
- Veldu upprunastrengina.
- Sláðu inn mynstur.
- Veldu Passa valkostinn.
- Til að hafa niðurstöðurnar sem formúlur, ekki gildi, veldu Passa valkostinn. 8>Setja inn sem formúlu gátreit.
- Smelltu á hnappinn Passa .
Augnabliki síðar er AblebitsRegexMatch aðgerðin sett inn í nýjan dálk hægra megin við gögnin þín.
Á skjámyndinni hér að neðan athugar aðgerðin hvort strengirnir í dálki A innihalda 7 stafa tölur eða ekki.
Ráð:
- The func Hægt er að setja inn beint í reit í gegnum venjulegan Insert Function valmynd, þar sem hann er flokkaður undir AblebitsUDFs .
- Sjálfgefið er að reglulegri segð er bætt við formúluna, en þú getur líka haldið það í sérstakri klefa. Fyrir þetta, notaðu bara reittilvísun fyrir 2. rifrildi.
- Sjálfgefið er að fallið er hástafanæmt . Notaðu (?i) mynstrið fyrir hástafaónæmir samsvörun.
Nánari upplýsingar er að finna í AblebitsRegexMatch aðgerðinni.
Svona á að gera samsvörun reglulega í Excel. Ég þakka þér fyrir lesturinn og hlakka til að sjá þig á blogginu okkar í næstu viku!
Lagt niðurhal
Excel Regex Match dæmi (.xlsm skrá)
Ultimate Suite 14- dag fullvirk útgáfa (.exe skrá)
Ef cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 To cntInputRows, 1 To cntInputRows) For iInputCurRow = 1 To cntInputRows For iInputTourColReput. .Cells(iInputCurRow, iInputCurCol).Value) Next Next RegExpMatch = arRes Exit Function ErrHandl: RegExpMatch = CVErr(xlErrValue) End FunctionLímdu kóðann í VBA ritlinum og nýja RegExpMatch aðgerðin þín er tilbúið til notkunar. Ef þú hefur ekki mikla reynslu af VBA gæti þessi handbók verið gagnleg: Hvernig á að setja inn VBA kóða í Excel.
Athugið. Eftir að þú hefur sett inn kóðann skaltu muna að vista skrána þína sem macro-virkjað vinnubók (.xlsm).
RegExpMatch setningafræði
RegExpMatch aðgerðin athugar hvort einhver hluti upprunastrengsins passi við venjulega segð. Niðurstaðan er Boolean gildi: TRUE ef að minnsta kosti ein samsvörun finnst, FALSE annars.
Sérsniðna aðgerðin okkar hefur 3 rök - fyrstu tvær eru nauðsynlegar og sá síðasti er valfrjáls:
RegExpMatch(texti , mynstur, [match_case])Hvar:
- Texti (áskilið) - einn eða fleiri strengir til að leita í. Hægt að útvega sem hólf eða svið tilvísun.
- Mynstur (áskilið) - reglubundna segðin sem passa við. Þegar það er sett beint inn í formúlu verður mynstur að vera innan tveggja gæsalappa.
- Passunarfall (valfrjálst) - skilgreinir samsvöruntegund. Ef TRUE eða því er sleppt (sjálfgefið), er samsvörun sem er há og hástöfum framkvæmd; ef FALSE - ónæmir fyrir hástöfum.
Hugsunin virkar í öllum útgáfum af Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 og Excel 2010.
3 hlutir sem þú ætti að vita um RegExpMatch
Áður en við komum að hagnýtum útreikningum, vinsamlegast taktu eftir eftirfarandi atriðum sem skýra nokkur tæknileg atriði:
- Fullið getur unnið úr einni reit eða frumusvið . Í síðara tilvikinu er niðurstöðunum skilað í nálægum hólfum í formi kraftmikils fylkis, eða lekasviðs, eins og sýnt er í þessu dæmi.
- Sjálfgefið er að aðgerðin er hástafanæm . Til að hunsa stóra og stóra texta skaltu stilla match_case röksemdin á FALSE. Vegna VBA Regexp takmarkana er mynstrið (?i) ekki stutt.
- Ef gilt mynstur finnst ekki, skilar fallið FALSE; ef mynstrið er ógilt er #VALUE! villa kemur upp.
Hér að neðan finnurðu nokkur dæmi um samsvörun á regex sem voru búin til í sýnikennslu. Við getum ekki ábyrgst að mynstrin okkar virki gallalaust með fjölbreyttari inntaksgögnum í raunverulegu vinnublöðunum þínum. Áður en þú setur í framleiðslu, vertu viss um að prófa og aðlaga sýnishornin okkar í samræmi við þarfir þínar.
Hvernig á að nota regex til að passa saman strengi í Excel
Þegar allir strengirnir sem þú vilt passa hafa sama mynstur,Regluleg segð eru tilvalin lausn.
Svo sem þú sért með fjölda frumna (A5:A9) sem innihalda ýmsar upplýsingar um sum atriði. Þú vilt vita hvaða frumur hafa SKUs. Miðað við að hvert vörunúmer samanstendur af 2 hástöfum, bandstrik og 3 tölustöfum, þá geturðu passað þau með eftirfarandi segð.
Mynstur : \b[A-Z]{2}-\ d{3}\b
Þar sem [A-Z]{2} þýðir hvaða 2 hástafi sem er frá A til Ö og \d{3} þýðir hvaða 3 tölustafi sem er frá 0 til 9. \b stafurinn táknar orð mörk, sem þýðir að SKU er sérstakt orð og ekki hluti af stærri streng eins og 23-MAR-2022.
Með mynstrinu komið getum við haldið áfram að skrifa formúlu. Í meginatriðum, notkun sérsniðinnar aðgerð er ekkert frábrugðin innfæddri. Um leið og þú byrjar að slá inn formúlu mun nafn fallsins birtast á listanum sem sjálfvirk útfylling Excel stingur upp á. Hins vegar eru nokkur blæbrigði í Dynamic Array Excel (Microsoft 365 og Excel 2021) og hefðbundnum Excel (2019 og eldri útgáfum).
Passaðu streng í einum reit
Til að passa við streng í einum reit, vísa til þess reits í fyrstu röksemdinni. Önnur röksemdin á að innihalda reglulega tjáningu.
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Mynstrið er einnig hægt að geyma í fyrirfram skilgreindum reit, sem er læst með algerri tilvísun ($A$2):
=RegExpMatch(A5, $A$2)
Eftir að hafa slegið formúluna inn í fyrsta reitinn geturðu dregið hana niður í allar aðrar línur.
Þessi aðferðvirkar fallega í öllum Excel útgáfum .
Passaðu saman strengi í mörgum hólfum í einu
Til að passa marga strengi með einni formúlu, fela í sér sviðsvísun í fyrstu röksemdinni:
=RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")
Í Excel 365 og Excel 2021 sem styðja kraftmikla fylki, virkar þetta svona - þú slærð formúluna inn í fyrsta reitinn, ýtir á Enter , og formúlan hellist sjálfkrafa inn í reitina fyrir neðan.
Í Excel 2019 og fyrr, það virkar aðeins sem hefðbundin CSE fylkisformúla, sem er slegin inn í fjölda hólfa og lokið með því að ýta á Ctrl + Shift + Enter takkana saman.
Regex til að passa við tölu
Til að passa við einhvern stakan tölustaf frá 0 til 9, notaðu \d stafinn í regex. Það fer eftir tilteknu verkefni þínu, bættu við viðeigandi mælikvarða eða búðu til flóknara mynstur.
Regex til að passa við hvaða tölu sem er
Til að passa við hvaða tölu sem er af hvaða lengd sem er skaltu setja + magnið rétt á eftir / d stafur, sem segir að leita að tölum sem innihalda 1 eða fleiri tölustafi.
Mynstur : \d+
=RegExpMatch(A5:A9, "\d+")
Regex til að passa við fjölda af ákveðinni lengd
Ef markmið þitt er að passa saman tölugildi sem innihalda ákveðinn fjölda tölustafa, notaðu þá \d ásamt viðeigandi magni.
Til dæmis, til að passa við reikningsnúmer sem samanstanda af nákvæmlega 7 tölustöfum, myndirðu nota \d{7}. Hins vegar skaltu hafa í huga að það mun passa við 7eins og búist var við:
Athugasemdir:
- Alþjóðlegir kóðar eru ekki merktir, þannig að þeir gætu verið til staðar eða ekki.
- Í reglulegum tjáningum stendur \s fyrir hvaða hvíta staf sem er eins og bil, flipa, vagnsskil eða nýja línu. Til að leyfa aðeins bil skaltu nota [-\. ] í stað [-\.\s].
- [^13] mun passa við hvern einasta staf sem er ekki 1 eða 3.
- [^1-3] mun passa við hvern einasta staf sem er ekki 1, 2 eða 3 (þ.e. hvaða tölu sem er frá 1 til 3).
- Ofangreind regex virkar aðeins fyrir einlínu strengi. Ef um er að ræða millilínustrengi passa ^ og $ stafirnir við upphaf og lok hverrar línu í stað upphafs og enda inntaksstrengsins, þess vegna leitar regex aðeins í fyrstu línunni.
- Til að passa saman strengi sem byrja ekki við ákveðinn texta , notaðu reglulega segð eins og ^(?!sítrónur).*$
- Til að passa saman strengi sem enda ekki með ákveðnum texta skaltu taka meðendastrengurinn festir inn í leitarmynstrið: ^((?!lemons$).)*$
Regex to NOT match character
Til að finna strengi sem innihalda EKKI ákveðinn staf er hægt að nota neitaða stafaflokka [^ ] sem passa saman hvað sem er EKKI innan sviga. Til dæmis:
Í lista yfir símanúmer, segjum að þú viljir finna þau sem ekki hafa landsnúmer. Hafðu í huga að allir alþjóðlegir kóðar innihalda + táknið, þú getur notað [^\+] stafaflokkinn til að finna strengi sem innihalda ekki plúsmerki. Það er mikilvægt að átta sig á því að tjáningin hér að ofan passar við hvern einasta staf sem er ekki +. Vegna þess að símanúmer getur verið hvar sem er í streng, ekki endilega í byrjun, er * magni bætt við til að athuga hvern síðari staf. Start ^ og endir $ akkeri tryggja að allur strengurinn sé unninn. Afleiðingin er sú að við fáum reglulegu tjáninguna fyrir neðan sem segir "ekki passa við + stafinn í neinni stöðu í strengnum".
Mynstur :^[^\+]*$
=RegExpMatch(A5, "^[^\+]*$")
Regex á EKKI að passa við streng
Þó að það sé engin sérstök setningafræði með reglulegri tjáningu fyrir passar ekki við ákveðinn streng, þú getur líkt eftir þessari hegðun með því að nota neikvætt útlit.
Svo sem þú vilt finna strengi sem innihalda ekki orðið "sítrónur". Þessi reglubundna tjáning mun virka vel:
Mynstur : ^((?!sítrónur).)*$
Auðvitað þarf einhverja skýringu hér. Neikvæða útlitið (?!sítrónur) lítur til hægri til að sjá hvort ekkert orð "sítrónur" sé framundan. Ef "sítrónur" er ekki til staðar, þá passar punkturinn við hvaða staf sem er nema línuskil. Tjáningin hér að ofan framkvæmir aðeins eina athugun og * magnari endurtekur það núll eða oftar, frá upphafi strengsins sem er festur með ^ til enda strengsins sem er festur með $.
Til að hunsa stóra og háa textann, við settum 3. röksemdina á FALSE til að gera fallið okkar há- og hástafaónæmi:
=RegExpMatch(A5, $A$2, FALSE)
Ráð og athugasemdir:
Stafóviðkvæm samsvörun
Í klassískum reglulegum tjáningum er sérstakt mynstur fyrir samsvörun (?i), sem er ekki næm fyrir hástöfum, sem er ekki studd í VBA RegExp. Til að sigrast á þessari takmörkun samþykkir sérsniðna aðgerðin okkar 3. valfrjálsu röksemdafærsluna sem heitir match_case . Til að gera samsvörun sem er ónæm fyrir hástöfum skaltu einfaldlega stilla hana á FALSE.
Segjum að þú viljir bera kennsl á dagsetningar eins og 1. mars-22 eða 01-MAR-2022. Til að passa við dd-mmm-yyyy og d-mmm-yy sniðin, erum við að nota eftirfarandi reglulega segð.
Mynstur : \b\d{1,2}-(jantölustafir hvar sem er í strengnum, þar með talið 10 stafa eða 100 stafa tölu. Ef þetta er ekki það sem þú ert að leita að skaltu setja orðamörk \b báðum megin.
Mynstur : \b\d{7}\b
=RegExpMatch(A5:A9, "\b\d{7}\b")
Regex til að passa við símanúmer
Þar sem hægt er að skrifa símanúmer á ýmsum sniðum þarf flóknari reglubundna tjáningu til að passa saman.
Í gagnasafninu hér að neðan munum við leita að 10 stafa tölum sem hafa 3 tölustafi í fyrstu 2 hópunum og 4 tölustafi í síðasta hópnum. Hægt er að aðskilja hópana með punkti, bandstriki eða bili. Fyrsti hópurinn gæti verið innan sviga eða ekki.
Mynstur: (\(\d{3}\)