Excel Regex: lotu kateak adierazpen erregularrak erabiliz

  • Partekatu Hau
Michael Brown

Tutorial honetan, Excel-en kateak bat etortzeko regex nola erabili aztertuko dugu.

Barruti batean balio jakin bat aurkitu behar duzunean gelaxka, MATCH edo XMATCH funtzioa erabiliko zenuke. Gelaxka batean kate zehatz bat bilatzean, BILATU eta BILATU funtzioak erabilgarriak dira. Eta nola dakizu gelaxka batek eredu jakin batekin bat datorren informazioa duen? Jakina, adierazpen erregularrak erabiliz. Baina kaxatik kanpo Excel-ek ez du onartzen regexeak! Ez kezkatu, behartuko dugu :)

    Excel VBA Regex funtzioa kateak bat etortzeko

    Izenburuan nahiko argi ikusten denez, adierazpen erregularrak erabiltzeko Excel-en, zure funtzioa sortu behar duzu. Zorionez, Excel-en VBA-k RegExp objektu bat dauka, eta zure kodean erabil dezakezu behean agertzen den bezala:

    Funtzio Publikoa RegExpMatch(sarrera_barrutia As Range, eredua String As, Aukerako match_case Boolean = True) As Variant Dim arRes() As Variant 'matrizea emaitzak gordetzeko Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'iturburu barrutian uneko errenkadaren indizea, iturri barrutian uneko zutabearen indizea, errenkaden kopurua, errenkaden kopurua. zutabeak Akatsean GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = eredua regex.Global = True regex.MultiLine = True If True = match_case Then regex.ignorecase = False Else regex.ignorecase = True Amaieraadierazpenak.

    Eredua : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b

    Hemen gertatzen ari dena hobeto ulertzeko, ikus ditzagun zati bakoitza gertutik. :

    • Erabiltzaile izena hizkiak, zenbakiak, azpimarra, puntuak eta marratxoak izan ditzake. Kontuan izanda \w edozein hizki, zifra edo azpimarrarekin bat datorrela, honako adierazpen erregular hau jasoko dugu: [\w\.\-]+
    • Domeinu-izena letra larriak eta minuskulak izan ditzake. digituak, marratxoak (baina ez lehen edo azken posizioan) eta puntuak (azpidomeinuen kasuan). Azpimarratzekoak ez direnez, \w ordez 3 karaktere multzo ezberdin erabiltzen ari gara: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
    • Goi-mailako domeinua puntu batez osatuta dago eta ondoren letra larriz eta minuskulaz osatuta dago. 2 eta 24 letra artekoak izan ditzake (gaur egun dagoen TLD luzeena): \.[A-Za-z]{2,24}

    Oharra. Ereduak domeinu-izenak 2 karaktere alfanumeriko edo gehiago dituela suposatzen du.

    Jatorrizko testua A5-n eta eredua A5-n, formulak forma hau hartzen du:

    =RegExpMatch(A5, $A$2)

    Edo erregular sinpleagoa erabil dezakezu. Posta elektronikoa baliozkotzeko adierazpena letra larriz edo xeheekin:

    Eredua : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b

    Baina formula maiuskulak eta minuskulak bereiztea:

    =RegExpMatch(A5, $A$2, FALSE)

    Excel IF formula bat-etortze erregulazioarekin

    Inkorporatutako eta pertsonalizatua dela eta.funtzioak ondo doaz, ez dago formula bakar batean elkarrekin erabiltzea eragotziko duen ezer.

    Adierazpen erregular bat bat datorrena bada zerbait itzultzeko edo kalkulatzeko eta bat ez badator beste zerbait, txertatu RegExpMatch pertsonalizatua. funtzioa IF:

    IF(RegExpMatch(…), [value_if_true], [value_if_false])

    Adibidez, A5-ko kate batek helbide elektroniko baliozko bat badu, "Bai" itzul dezakezu; bestela, "Ez".

    =IF(RegExpMatch(A5, $A$2,), "Yes", "No")

    Zentatu regex bat badator

    Jatorrizko Excel funtzioek adierazpen erregularrak onartzen ez dituztenez, hau da. ezinezkoa da regex bat zuzenean COUNTIS edo COUNTIFS funtzioan jartzea. Zorionez, funtzionalitate hau emulatu dezakezu gure funtzio pertsonalizatua erabiliz.

    Demagun, telefono-zenbakiak bat etortzeko eta emaitzak B zutabean atera dituzula adierazpen erregular bat erabili duzula. Zenbat telefono-zenbakiak dituzten jakiteko, besterik ez duzu behar. B5:B9 EGIA balioak zenbatzeko. Eta hori erraz egin daiteke COUNTIF formula estandarra erabiliz:

    =COUNTIF(B5:B9, TRUE)

    Ez al duzu zure lan-orrian zutabe gehigarririk nahi? Arazorik ez. Kontuan izanda gure funtzio pertsonalizatuak gelaxka bat baino gehiago prozesatu ditzakeela aldi berean eta Excel-en SUMak balioak gehi ditzakeela array batean, hona hemen zer egiten duzun:

    • Eman barruti erreferentzia bat RegExpMatch-i, beraz, bat itzultzen du. TRUE eta FALSE balioen array.
    • Erabili ezeztapen bikoitza (--) balio logikoak batetara behartzeko etazeroak.
    • Lortu SUM funtzioa ondoriozko matrizean 1ak eta 0ak gehitzeko.

    =SUM(--RegExpMatch(A5:A9, $A$2))

    Erregex bat etortzea Ultimate Suite-rekin

    Gure Ultimate Suite-ren erabiltzaileek lau Regex funtzio indartsu aprobetxa ditzakete beren lan-liburuetan VBA koderik gehitu gabe, gehigarriaren instalazioan Excel-en ondo integratzen baitira. Gure funtzio pertsonalizatuak .NET RegEx motor estandarrak prozesatzen ditu eta adierazpen erregular klasiko osoak onartzen ditu.

    Nola erabili RegexMatch funtzio pertsonalizatua

    Ultimate Suite-ren azken bertsioa instalatuta duzula suposatuz ( 2021.4 edo berriagoa), Regex Match formula bat sor dezakezu bi urrats errazetan:

    1. Ablebits Data fitxan, Testua taldean, egin klik. Regex Tresnak .

  • Regex Tresnak panelean, egin hau:
    • Hautatu iturburu-kateak.
    • Sartu zure eredua.
    • Aukeratu Lotu aukera.
    • Emaitzak formula gisa izateko, ez balio gisa, hautatu Txertatu formula gisa kontrol-laukia.
    • Sakatu Lotu botoian.

    Une bat geroago, AblebitsRegexMatch funtzioa zure datuen eskuinean dagoen zutabe berri batean txertatzen da.

    Beheko pantaila-argazkian, funtzioak A zutabeko kateek 7 digitu dituzten egiaztatzen du. zenbakiak ala ez.

    Aholkuak:

    • Func. zioa txertatu daiteke zuzenean gelaxka batean Txertatu funtzioa elkarrizketa-koadro estandarraren bidez, non AblebitsUDFs atalean sailkatuta dagoen.
    • Lehenespenez, adierazpen erregular bat gehitzen zaio formulari, baina gorde dezakezu. bereizitako gelaxka batean. Horretarako, erabili gelaxka-erreferentzia bat 2. argumenturako.
    • Berez, funtzioak maiuskulak eta minuskulak bereizten ditu . Maiuskulak eta minuskulak bereizten ez diren bat etortzeko, erabili (?i) eredua.

    Informazio gehiago lortzeko, ikusi AblebitsRegexMatch funtzioa.

    Horrela egin daiteke adierazpen erregularrak Excel-en. Eskerrik asko irakurtzeagatik eta hurrengo astean gure blogean ikustea espero dut!

    Deskarga erabilgarri

    Excel Regex Match adibideak (.xlsm fitxategia)

    Ultimate Suite 14- eguneko bertsio guztiz funtzionala (.exe fitxategia)

    If cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCurCol = 1 To cntInputRows(TrInputCols ar) = cntInputCur. .Cells(iInputCurRow, iInputCurCol).Value) Hurrengoa Hurrengoa RegExpMatch = arRes Irten funtzioa ErrHandl: RegExpMatch = CVErr(xlErrValue) End Function

    Itsatsi kodea VBA editorean, eta zure RegExpMatch funtzio berria da erabiltzeko prest. VBA-rekin esperientzia handirik ez baduzu, gida hau lagungarria izan daiteke: Nola txertatu VBA kodea Excel-en.

    Oharra. Kodea sartu ondoren, gogoratu fitxategia makro gaitutako lan-liburua (.xlsm) gisa gorde behar duzula.

    RegExpMatch sintaxia

    RegExpMatch funtzioak iturburu-katearen zatiren bat adierazpen erregular batekin bat datorren egiaztatzen du. Emaitza balio boolearra da: EGIA gutxienez bat etortze bat aurkitzen bada, GEZURRA bestela.

    Gure funtzio pertsonalizatuak 3 argumentu ditu - lehenengo biak beharrezkoak dira eta azkena aukerakoa da:

    RegExpMatch(testua , eredua, [match_case])

    Non:

    • Testua (beharrezkoa) - kate bat edo gehiago bilatzeko. Gelaxka edo barrutiaren erreferentzia gisa eman daiteke.
    • Eredua (beharrezkoa) - bat datorren adierazpen erregularra. Zuzenean formula batean jartzen denean, eredu bat komatxo bikoitz artean sartu behar da.
    • Match_case (aukerakoa) - bat-etortzea definitzen du.mota. EGIA edo baztertzen bada (lehenetsia), maiuskulak eta minuskulak bereizten dira; GEZURRA bada - maiuskulak eta minuskulak bereizten dira.

    Funtzioak Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 eta Excel 2010 bertsio guztietan funtzionatzen du.

    Zuk hiru gauza. RegExpMatch-i buruz jakin beharko luke

    Kalkulu praktikoetara iritsi baino lehen, kontutan izan teknikotasun batzuk argitzen dituzten puntu hauetaz:

    1. Funtzioak zelula bakarra<9 prozesatu dezake> edo gelaxka sorta . Azken kasu honetan, emaitzak aldameneko gelaxketan itzultzen dira matrize dinamiko edo isurketa-barruti baten moduan, adibide honetan erakusten den bezala.
    2. Lehenespenez, funtzioak maiuskulak eta minuskulak bereizten ditu . Testuaren maiuskulak eta minuskulak baztertzeko, ezarri match_case argumentua FALSE gisa. VBA Regexp-en mugak direla eta, maiuskulak eta minuskulak bereizten ez dituen eredua (?i) ez da onartzen.
    3. Eredu baliozkorik aurkitzen ez bada, funtzioak GEZURRA itzultzen du; eredua baliogabea bada , #BALIOA! errorea gertatzen da.

    Behean, erakustaldietarako sortu diren regex bat-etortzeen adibide batzuk aurkituko dituzu. Ezin dugu bermatu gure ereduak akatsik gabe funtzionatuko dutenik zure benetako lan-orrietako sarrera-datu sorta zabalagoarekin. Ekoizpenean jarri aurretik, ziurtatu gure lagin-ereduak zure beharren arabera probatu eta doitzen dituzula.

    Nola erabili regex Excel-en kateak lotzeko

    Lotu nahi dituzun kate guztiek dutenean. eredu bera,Adierazpen erregularrak irtenbide aproposa dira.

    Elementu batzuei buruzko hainbat xehetasun dituzten gelaxka sorta (A5:A9) demagun. SKUak zein zelulak dituzten jakin nahi duzu. SKU bakoitza 2 letra larriz, marratxo bat eta 3 zifraz osatuta dagoela suposatuz, ondoko adierazpena erabiliz pareka ditzakezu.

    Eredua : \b[A-Z]{2}-\ d{3}\b

    Non [A-Z]{2} edozein letra larriz Atik Z-ra eta \d{3} 0tik 9ra edozein 3 zifra esan nahi du. \b karaktereak hitz bat adierazten du. muga, hau da, SKU bat hitz bereizia da, eta ez 2022-MAR-23 bezalako kate handiago baten parte.

    Eredua ezarrita, formula bat idaztera pasa gaitezke. Funtsean, funtzio pertsonalizatu bat erabiltzea ez da jatorrizko baten desberdina. Formula bat idazten hasi bezain laster, funtzioaren izena Excel-en Osaketa automatikoak iradokitako zerrendan agertuko da. Hala ere, ñabardura pare bat daude Dynamic Array Excel-en (Microsoft 365 eta Excel 2021) eta Excel tradizionala (2019 eta bertsio zaharragoak).

    Lotu katea gelaxka batean

    Kate batekin bat etortzeko. gelaxka bakarrean, erreferentzia gelaxka horri lehen argumentuan. Bigarren argumentuak adierazpen erregular bat eduki behar duela suposatzen du.

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Eredua aurrez zehaztutako gelaxka batean ere gorde daiteke, erreferentzia absolutu batekin blokeatuta dagoena ($A$2):

    =RegExpMatch(A5, $A$2)

    Lehenengo gelaxkan formula sartu ondoren, beste errenkada guztietara arrastatu dezakezu.

    Metodo hauederki funtzionatzen du Excel-en bertsio guztietan .

    Lotu gelaxka anitzetan kateak aldi berean

    Kate anitz formula bakar batekin lotzeko, sartu barruti-erreferentzia lehen argumentuan:

    =RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")

    Matrize dinamikoak onartzen dituzten Excel 365 eta Excel 2021 -n, horrela funtzionatzen du - formula lehenengo gelaxkan idazten duzu, sakatu Sartu eta formula automatikoki isuriko da beheko gelaxketan.

    Excel 2019 -n eta lehenago, CSE array-formula tradizional gisa bakarrik funtzionatzen du, gelaxka-barruti batean sartzen dena eta Ctrl + Shift + Sartu teklak batera sakatuz osatzen dena.

    Regex zenbakiarekin bat etortzeko

    0tik 9rako edozein zifra bat etortzeko, erabili \d karakterea adierazpen erregularrean. Zure zeregin zehatzaren arabera, gehitu zenbatzaile egoki bat edo sortu eredu konplexuago bat.

    Edozein zenbaki bat etortzeko erregulartasuna

    Edozein luzera duen edozein zenbaki bat etortzeko, jarri + zenbatzailea //ren ondoan. d karakterea, zifra bat edo gehiago duten zenbakiak bilatzeko dioena.

    Eredua : \d+

    =RegExpMatch(A5:A9, "\d+")

    Regex luzera zehatzeko zenbakiarekin bat etortzeko

    Zure helburua zifra kopuru jakin bat duten zenbakizko balioekin bat etortzea bada, erabili \d zenbatzaile egoki batekin batera.

    Adibidez, Zehazki 7 zifraz osatutako faktura-zenbakiak lotzeko, \d{7} erabiliko zenuke. Hala ere, kontuan izan 7rekin bat egingo duelaespero bezala:

    Oharrak:

    • Nazioarteko kodeak ez dira egiaztatzen, beraz, egon daitezke edo ez egon.
    • Adierazpen erregularretan, \s edozein zuriune karaktereak adierazten du, hala nola, zuriunea, tabulazioa, orga-itzulera edo lerro berria. Zuriuneak soilik onartzeko, erabili [-\. ] [-\.\s]-ren ordez.
    • Erregex karakterea EZ bat etortzeko

      Kaktere jakin bat EZ duten kateak aurkitzeko, bat datozen karaktere-klase ezeztatuak erabil ditzakezu [^ ] edozer EZ parentesi artean. Adibidez:

      • [^13] 1 edo 3 ez den edozein karaktere bat etorriko da.
      • [^1-3] 1 ez den edozein karaktere bat etorriko da. 2 edo 3 (hau da, 1etik 3ra arteko edozein zifra).

      Telefono-zenbakien zerrenda batean, demagun herrialde-koderik ez dutenak aurkitu nahi dituzula. Kontuan izanda nazioarteko edozein kodek + ikurra duela, [^\+] karaktere klasea erabil dezakezu plus zeinurik ez duten kateak aurkitzeko. Garrantzitsua da konturatzea goiko adierazpena + ez den edozein karaktere bakar bat datorrela. Telefono-zenbaki bat kate bateko edozein lekutan egon daitekeenez, ez nahitaez hasieran bertan, * zenbatzailea gehitzen da ondorengo karaktere bakoitza egiaztatzeko. Hasiera ^ eta $ amaierako aingurek kate osoa prozesatzen dela ziurtatzen dute. Ondorioz, beheko adierazpen erregularra lortuko dugu, "ez bat etorri + karakterearekin katearen edozein posiziotan" dioena.

      Eredua :^[^\+]*$

      =RegExpMatch(A5, "^[^\+]*$")

      Regex katea EZ bat etortzeko

      Nahiz eta ez dagoen adierazpen erregular sintaxi berezirik kate zehatz batekin bat ez datorrela, portaera hau emulatu dezakezu begirada negatiboa erabiliz.

      Demagun ez duten "lemoi" hitza ez duten kateak aurkitu nahi dituzula. Adierazpen erregular honek atsegina izango du:

      Eredua : ^((?!lemons).)*$

      Jakina, azalpen batzuk behar dira hemen. Aurrera begira (?!lemons) negatiboak eskuinera begiratzen du, "lemons" hitzik ez dagoen ikusteko. "Lemons" ez badago, puntua edozein karaktere bat dator lerro-jauzi batekin izan ezik. Goiko adierazpenak egiaztapen bakarra egiten du, eta * zenbatzaileak zero edo gehiago aldiz errepikatzen du, ^-k ainguratuta dagoen katearen hasieratik $-k ainguratutako katearen amaierara arte.

      Testuaren maiuskulak kasu ez egiteko, 3. argumentua FALSE gisa ezarri dugu gure funtzioa maiuskulak eta minuskulak bereizteko:

      =RegExpMatch(A5, $A$2, FALSE)

      Aholkuak eta oharrak:

      • Goiko adierazpen erregularrak lerro bakarreko kateetarako soilik funtzionatzen du. Milti-lerroko kateen kasuan, ^ eta $ karaktereak lerro bakoitzaren hasiera eta amaierarekin bat datoz sarrerako katearen hasiera eta amaierarekin ordez, beraz, erreexek lehen lerroan soilik bilatzen du.
      • hasten ez diren testu jakin batekin kateak lotzeko, erabili ^(?!lemons) bezalako adierazpen erregular bat.*$
      • Amaitzen ez diren testu jakin batekin kateak lotzeko, sartuamaierako katea bilaketa-ereduan ainguratzen da: ^((?!lemons$).)*$

      Mauskulak eta minuskulak bereizten ez dituen bat-etortzea

      Adierazpen erregular klasikoetan, eredu berezi bat dago. maiuskulak eta minuskulak bereizten ez dituena (?i), VBA RegExp-en onartzen ez dena. Muga hori gainditzeko, gure funtzio pertsonalizatuak match_case izeneko 3. aukerako argumentua onartzen du. Maiuskulak eta minuskulak bereizten ez dituen bat etortzeko, ezarri FALSE gisa.

      Demagun 2022ko martxoak 1 edo 2022ko martxoak 01 bezalako datak identifikatu nahi dituzula. dd-mmm-yyyy eta d-mmm-yy formatuekin bat etortzeko, adierazpen erregular hau erabiltzen ari gara.

      Eredua : \b\d{1,2}-(Urtzifrak katearen edozein lekutan, 10 zifrako edo 100 zifrako zenbakia barne. Hau ez bada bilatzen ari zarena, jarri hitzaren muga \b bi aldeetan.

      Eredua : \b\d{7}\b

      =RegExpMatch(A5:A9, "\b\d{7}\b")

      Telefono-zenbakiekin bat etortzeko erregulartasuna

      Telefono-zenbakiak hainbat formatutan idatz daitezkeenez, horiek parekatzeak adierazpen erregular sofistikatuagoa behar du.

      Beheko datu multzoan, lehenengo 2 taldeetan 3 zifra eta azken taldean 4 zifra dituzten 10 zifrako zenbakiak bilatuko ditugu. Taldeak puntu batekin, marratxo batekin edo espazio batekin bereiz daitezke. Lehenengo taldea parentesi artean sar daiteke edo ez.

      Eredua: (\(\d{3}\)

    Michael Brown teknologia-zale dedikatua da, software-tresnak erabiliz prozesu konplexuak sinplifikatzeko grina duena. Hamarkada bat baino gehiagoko esperientzia duen teknologia-industrian, Microsoft Excel eta Outlook-en eta Google Sheets eta Docs-en trebetasunak landu ditu. Michael-en bloga bere ezagutzak eta esperientziak besteekin partekatzera zuzenduta dago, produktibitatea eta eraginkortasuna hobetzeko aholku eta tutorial errazak eskaintzen ditu. Profesional ondua edo hasiberria izan, Michael-en blogak informazio baliotsuak eta aholku praktikoak eskaintzen ditu funtsezko software-tresna horiei etekinik handiena ateratzeko.