Enhavtabelo
En ĉi tiu lernilo, ni profunde rigardos kiel uzi regex por kongrui ĉenojn en Excel.
Kiam vi bezonas trovi certan valoron en gamo. de ĉeloj, vi uzus la funkcion MATCH aŭ XMATCH. Kiam vi serĉas specifan ŝnuron en ĉelo, la funkcioj TROVU kaj SERĈI utilas. Kaj kiel vi scias ĉu ĉelo enhavas informojn, kiuj kongruas kun donita ŝablono? Evidente, uzante regulajn esprimojn. Sed el la skatolo Excel ne subtenas regex-ojn! Ne zorgu, ni devigos ĝin :)
Excel VBA Regex-funkcio por kongrui kun ĉenoj
Kiel estas sufiĉe klare de la titolo, por uzi regulajn esprimojn. en Excel, vi devas krei vian propran funkcion. Feliĉe, la VBA de Excel havas enkonstruitan RegExp objekton, kiun vi povas uzi en via kodo kiel montrite sube:
Publika Funkcio RegExpMatch (input_range As Range, pattern As String , Optional match_case As Bulea = True ) As Variant Dim arRes() As Variant 'tabelo por stoki la rezultojn Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'indekso de la nuna vico en la fonta gamo, indekso de la aktuala kolumno en la fonta gamo, kalkulo de vicoj, kalkulo de columns On Error GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = ŝablono regex.Global = True regex.MultiLine = True If True = match_case Then regex.ignorecase = False Else regex.ignorecase = True regex.ignorecase = Finoesprimoj.Skemo : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b
Por pli bone kompreni, kio okazas ĉi tie, ni rigardu pli detale ĉiun parton :
- Uzantnomo povas inkluzivi literojn, ciferojn, substrekojn, punktojn kaj streketojn. Konsiderante ke \w kongruas kun ajna litero, cifero aŭ substreko, ni ricevas la jenan regex: [\w\.\-]+
- Domajna nomo povas inkluzivi majusklojn kaj minusklojn, ciferoj, streketoj (sed ne en la unua aŭ lasta pozicio) kaj punktoj (kaze de subdomajnoj). Ĉar substrekoj ne estas permesitaj, anstataŭ \w ni uzas 3 malsamajn signaron: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
- Pintnivela domajno konsistas el punkto sekvata de majusklaj kaj minuskloj. Ĝi povas enhavi de 2 ĝis 24 literoj (la plej longa TLD nun ekzistanta): \.[A-Za-z]{2,24}
Noto. La ŝablono supozas, ke la domajna nomo enhavas 2 aŭ pli alfanombrajn signojn.
Kun la originala teksto en A5 kaj la ŝablono en A5, la formulo prenas ĉi tiun formon:
=RegExpMatch(A5, $A$2)
Aŭ vi povus uzi pli simplan regulan esprimo por retpoŝta validigo kun aŭ minuskla aŭ majuskla signaro:
Skemo : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b
Sed faru vian formulon maldistinga minuskleco:
=RegExpMatch(A5, $A$2, FALSE)
Excel IF-formulo kun kongrua regex
Pro la fakto ke enkonstruita kaj kutimofunkcioj bone iras, estas nenio, kio malhelpus vin uzi ilin kune en ununura formulo.
Por redoni aŭ kalkuli ion se regula esprimo kongruas kaj ion alian se ĝi ne kongruas, enmetu la kutiman RegExpMatch. funkcio en la logika teksto de IF:
IF(RegExpMatch(…), [valoro_se_vera], [valoro_se_malvera])Ekzemple, se ĉeno en A5 enhavas validan retadreson, vi povas redoni "Jes"; alie "Ne".
=IF(RegExpMatch(A5, $A$2,), "Yes", "No")
Nombri se regex kongruas
Ĉar denaskaj Excel-funkcioj ne subtenas regulajn esprimojn, ĝi estas ne eblas meti regex rekte en la funkcion COUNTIS aŭ COUNTIFS. Feliĉe, vi povas kopii ĉi tiun funkcion uzante nian kutiman funkcion.
Supoze, ke vi uzis regex por kongrui telefonnumerojn kaj eligi la rezultojn en kolumno B. Por ekscii kiom da ĉeloj enhavas telefonnumerojn, vi nur bezonas por kalkuli la VERajn valorojn en B5:B9. Kaj tio povas esti facile farita per la norma COUNTIF formulo:
=COUNTIF(B5:B9, TRUE)
Ĉu vi ne volas ekstrajn kolumnojn en via laborfolio? Nedankinde. Konsiderante, ke nia kutima funkcio povas prilabori plurajn ĉelojn samtempe kaj la SUM de Excel povas aldoni valorojn en tabelo, jen kion vi faras:
- Liveri intervalreferencon al RegExpMatch, do ĝi resendas tabelo de VERA kaj FALSA valoroj.
- Uzu duoblan neadon (--) por devigi la logikajn valorojn al unuj kajnuloj.
- Ekiru la funkcion SUM por adicii 1-ojn kaj 0-ojn en la rezulta tabelo.
=SUM(--RegExpMatch(A5:A9, $A$2))
Regeks-kongruo kun Ultimate Suite
La uzantoj de nia Ultimate Suite povas utiligi kvar potencajn Regex-funkciojn sen aldoni ajnan VBA-kodon al siaj laborlibroj, ĉar ili estas glate integritaj en Excel dum la aldonaĵinstalado. Niaj kutimaj funkcioj estas traktataj de la norma .NET RegEx-motoro kaj subtenas plenefikajn klasikajn regulajn esprimojn.
Kiel uzi la kutiman RegexMatch-funkcion
Supoze, ke vi havas la plej novan version de Ultimate Suite instalita ( 2021.4 aŭ poste), vi povas krei Regex Match-formulon en du simplaj paŝoj:
- En la langeto Ablebits Data , en la grupo Teksto , klaku Regex-Iloj .
- Elektu la fontoĉenoj.
- Enigu vian ŝablonon.
- Elektu la opcion Kongrui .
- Por havi la rezultojn kiel formulojn, ne valorojn, elektu la Enigu kiel formulon markobutono.
- Alklaku la Kongrui butonon.
Momenton poste, la funkcio AblebitsRegexMatch estas enmetita en novan kolumnon dekstre de viaj datumoj.
En la ekrankopio malsupre, la funkcio kontrolas ĉu la ĉenoj en kolumno A enhavas 7-ciferojn. nombroj aŭ ne.
Konsiloj:
- La funkcio tion povas esti enmetata rekte en ĉelon per la norma dialogujo Enmeti Funkcion , kie ĝi kategoriiĝas sub AblebitsUDFs .
- Defaŭlte, regula esprimo estas aldonita al la formulo, sed vi ankaŭ povas konservi ĝi en aparta ĉelo. Por tio, nur uzu ĉelan referencon por la 2-a argumento.
- Defaŭlte, la funkcio estas majuskle-distinga . Por majusksentema kongruo, uzu la (?i) ŝablonon.
Por pliaj informoj, bonvolu vidi AblebitsRegexMatch-funkcion.
Tiel fari regula esprimo kongruo en Excel. Mi dankas vin pro legi kaj antaŭĝojas vidi vin en nia blogo venontsemajne!
Haveblaj elŝutoj
Excel Regex Match-ekzemploj (.xlsm-dosiero)
Ultimate Suite 14- tago plenfunkcia versio (.exe dosiero)
Se cntInputRows = enigo_gamo.Rows.Count cntInputCols = enigo_gamo.Columns.Count ReDim arRes(1 Al cntInputRows, 1 Al cntInputRows) For iInputCurRow = 1 Al cntInputRows For iInputCurCol = 1 Al cntInputCurCol = 1 Al cntInputRows,TrInputRows = arCurInputCur_Inputls .Cells(iInputCurRow, iInputCurCol).Value) Sekva Sekva RegExpMatch = arRes Elira Funkcio ErrHandl: RegExpMatch = CVErr(xlErrValue) End FunctionAlgluu la kodon en la VBA-redaktilo, kaj via nova funkcio RegExpMatch estas preta por uzo. Se vi ne estas tre sperta pri VBA, ĉi tiu gvidilo povas esti helpema: Kiel enigi VBA-kodon en Excel.
Noto. Post enmeti la kodon, memoru konservi vian dosieron kiel makro-ebligita laborlibro (.xlsm).
Sintakso RegExpMatch
La funkcio RegExpMatch kontrolas ĉu iu parto de la fontĉeno kongruas kun regula esprimo. La rezulto estas Bulea valoro: VERA se almenaŭ unu kongruo estas trovita, FALSA alie.
Nia kutima funkcio havas 3 argumentojn - la unuaj du estas postulataj kaj la lasta estas laŭvola:
RegExpMatch(teksto , ŝablono, [match_case])Kie:
- Teksto (postulata) - unu aŭ pluraj ĉenoj por serĉi. Povas esti liverita kiel ĉelo aŭ intervalreferenco.
- Ŝablono (postulata) - la regula esprimo kongrua. Se metita rekte en formulon, ŝablono devas esti enfermita inter citiloj.
- Match_case (laŭvola) - difinas la kongruontajpu. Se VERA aŭ preterlasita (defaŭlte), uskle-distinta kongruo estas farita; se FALSA - nedistingeblas.
La funkcio funkcias en ĉiuj versioj de Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 kaj Excel 2010.
3 aferoj kiujn vi devus scii pri RegExpMatch
Antaŭ ol ni atingu praktikajn kalkulojn, bonvolu atenti la jenajn punktojn, kiuj klarigas kelkajn teknikaĵojn:
- La funkcio povas prilabori ununura ĉelo aŭ gamo de ĉeloj . En ĉi-lasta kazo, la rezultoj estas resenditaj en la najbaraj ĉeloj en formo de dinamika tabelo, aŭ disvastiga gamo, kiel montrite en ĉi tiu ekzemplo.
- Defaŭlte, la funkcio estas majuskle-distinga . Por ignori tekston, agordu la argumenton match_case al FALSE. Pro la VBA Regexp-limigoj, la majuskla nedistinga ŝablono (?i) ne estas subtenata.
- Se valida ŝablono ne estas trovita, la funkcio liveras FALSE; se la ŝablono estas nevalida , #VALORO! eraro okazas.
Malsupre, vi trovos kelkajn regex-kongruajn ekzemplojn kiuj estis kreitaj por pruvaj celoj. Ni ne povas garantii, ke niaj ŝablonoj funkcios senriproĉe kun pli larĝa gamo da eniga datumoj en viaj veraj laborfolioj. Antaŭ ol enmeti produktadon, nepre testi kaj ĝustigi niajn specimenajn ŝablonojn laŭ viaj bezonoj.
Kiel uzi regex por kongrui ĉenojn en Excel
Kiam ĉiuj ĉenoj, kiujn vi volas kongrui, havas la sama ŝablono,regulaj esprimoj estas ideala solvo.
Supozi vi havas gamon da ĉeloj (A5:A9) enhavantaj diversajn detalojn pri kelkaj eroj. Vi volas scii, kiuj ĉeloj havas SKUojn. Supozante, ke ĉiu SKU konsistas el 2 ĉapelitaj literoj, streketo kaj 3 ciferoj, vi povas kongrui ilin per la sekva esprimo.
Skemo : \b[A-Z]{2}-\ d{3}\b
Kie [A-Z]{2} signifas iujn ajn 2 majusklojn de A ĝis Z kaj \d{3} signifas iujn ajn 3 ciferojn de 0 ĝis 9. La signo \b indikas vorton limo, kio signifas, ke SKU estas aparta vorto, kaj ne parto de pli granda ĉeno kiel 23-MAR-2022.
Kun la ŝablono establita, ni povas pluiri al skribi formulon. Esence, uzi kutiman funkcion ne diferencas de indiĝena. Tuj kiam vi komencas tajpi formulon, la nomo de la funkcio aperos en la listo proponita de la Aŭtomata kompletigo de Excel. Tamen, ekzistas kelkaj nuancoj en Dynamic Array Excel (Microsoft 365 kaj Excel 2021) kaj tradicia Excel (2019 kaj pli malnovaj versioj).
Kongruu ĉenon en unu ĉelo
Por kongrui ĉeno. en ununura ĉelo, raportu al tiu ĉelo en la unua argumento. La dua argumento supozeble enhavas regulan esprimon.
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
La ŝablono ankaŭ povas esti konservita en antaŭdifinita ĉelo, kiu estas ŝlosita per absoluta referenco ($A$2):
=RegExpMatch(A5, $A$2)
Post enigi la formulon en la unua ĉelo, vi povas treni ĝin malsupren al ĉiuj aliaj vicoj.
Tiu ĉi metodo.funkcias bele en ĉiuj Excel-versioj .
Kongruu ĉenojn en pluraj ĉeloj samtempe
Por kongrui plurajn ŝnurojn kun ununura formulo, inkluzivu intervalreferencon en la unua argumento:
=RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")
En Excel 365 kaj Excel 2021 kiuj subtenas dinamikajn tabelojn, ĝi funkcias tiel - vi tajpas la formulon en la unua ĉelo, premu Enigu , kaj la formulo aŭtomate verŝas en la subajn ĉelojn.
En Excel 2019 kaj pli frue, ĝi nur funkcias kiel tradicia CSE-tabelformulo, kiu estas enigita en gamo da ĉeloj kaj kompletigita per premado de la klavoj Ctrl + Shift + Enigu kune.
Regex por kongrui numeron
Por kongrui kun ajna unuopa cifero de 0 ĝis 9, uzu la signon \d en la regex. Depende de via speciala tasko, aldonu taŭgan kvantigilon aŭ kreu pli kompleksan ŝablonon.
Regex por kongrui kun ajna nombro
Por kongrui kun ajna nombro de ajna longo, metu la + kvantigilon tuj post la / d signo, kiu diras serĉi nombrojn enhavantajn 1 aŭ pli da ciferoj.
Skemo : \d+
=RegExpMatch(A5:A9, "\d+")
Regex por kongrui nombron de specifa longo
Se via celo estas kongrui nombrajn valorojn enhavantajn certan nombron da ciferoj, tiam uzu \d kune kun taŭga kvantigilo.
Ekzemple, por kongrui fakturnombrojn konsistantajn el ekzakte 7 ciferoj, vi uzus \d{7}. Tamen bonvolu memori, ke ĝi kongruos kun 7kiel atendite:
Notoj:
- Internaciaj kodoj ne estas kontrolitaj, do ili povas aŭ ne ĉeesti.
- En regulaj esprimoj, \s signifas ajnan blankspacan signon kiel spacon, tabuladon, kaleŝon aŭ novan linion. Por permesi nur spacojn, uzu [-\. ] anstataŭ [-\.\s].
- [^13] kongruos kun ajna unuopa signo kiu ne estas 1 aŭ 3.
- [^1-3] kongruos kun ajna ununura signo kiu ne estas 1, 2 aŭ 3 (t.e. ajna cifero de 1 ĝis 3).
- La ĉi-supra regex nur funkcias por unuliniaj ĉenoj. En kazo de milti-liniaj ĉenoj, la ^ kaj $ signoj kongruas kun la komenco kaj fino de ĉiu linio anstataŭ la komenco kaj fino de la eniga ĉeno, tial la regex nur serĉas en la unua linio.
- Por kongrui ĉenoj kiuj ne komenciĝas per certa teksto , uzu regulan esprimon kiel ^(?!citronoj).*$
- Por kongrui ĉenojn kiuj ne finiĝas per certa teksto , inkluzivula finŝnuro ankro en la serĉŝablon: ^((?!citronoj$).)*$
Regex por NE kongrui kun signo
Por trovi ĉenojn, kiuj NE enhavas certan signon, vi povas uzi neigitajn signoklasojn [^ ] kiuj kongruas. io ajn NE inter krampoj. Ekzemple:
En listo de telefonnumeroj, supozu, ke vi volas trovi tiujn, kiuj ne havas landokodon. Konsiderante, ke iu ajn internacia kodo inkluzivas la +-signon, vi povas uzi la signoklason [^\+] por trovi ĉenojn kiuj ne enhavas plus-signon. Gravas rimarki, ke la supra esprimo kongruas kun ajna unuopa signo kiu ne estas +. Ĉar telefonnumero povas esti ie ajn en ĉeno, ne nepre en la komenco mem, la * kvantigilo estas aldonita por kontroli ĉiun postan signon. La komenca ^ kaj finaj $ ankroj certigas, ke la tuta ŝnuro estas prilaborita. Kiel rezulto, ni ricevas la malsupran regulan esprimon, kiu diras "ne kongruas kun la + signo en iu ajn pozicio en la ĉeno".
Skemo :^[^\+]*$
=RegExpMatch(A5, "^[^\+]*$")
Regex por NE kongrui ĉeno
Kvankam ne ekzistas speciala regula esprimo sintakso por ne kongruas kun specifa ĉeno, vi povas kopii ĉi tiun konduton uzante negativan antaŭrigardon.
Supozi vi volas trovi ĉenojn kiuj ne enhavas la vorton "citronoj". Ĉi tiu regula esprimo funkcios plaĉon:
Skemo : ^((?!citronoj).)*$
Evidente, ĉi tie necesas ia klarigo. La negativa antaŭrigardo (?!citronoj) rigardas dekstren por vidi ĉu ne estas vorto "citronoj" antaŭen. Se "citronoj" ne estas tie, tiam la punkto kongruas kun ajna signo krom linirompo. La ĉi-supra esprimo faras nur unu kontrolon, kaj la * kvantigilo ripetas ĝin nul aŭ pli da fojoj, de la komenco de la ĉeno ankrita per ^ ĝis la fino de la ĉeno ankrita per $.
Por ignori la tekston, ni agordas la 3-an argumenton al FALSA por ke nian funkcion nedistingu la usklekon:
=RegExpMatch(A5, $A$2, FALSE)
Konsiletoj kaj notoj:
Majusksence nesentema kongruo
En klasikaj regulaj esprimoj, ekzistas speciala ŝablono por uskle-nesensitiva kongruo (?i), kiu ne estas subtenata en VBA RegExp. Por venki ĉi tiun limigon, nia kutima funkcio akceptas la 3-an laŭvolan argumenton nomitan match_case . Por fari majusklan kongruon, simple agordu ĝin al FALSA.
Ni diru, ke vi volas identigi datojn kiel 1-mar-22 aŭ 01-MAR-2022. Por kongrui kun la dd-mmm-yyyy kaj d-mmm-yy -formatoj, ni uzas la jenan regulan esprimon.
Skemo : \b\d{1,2}-(Janciferoj ie ajn en la ŝnuro inkluzive de 10-cifera aŭ 100-cifera nombro. Se tio ne estas tio, kion vi serĉas, metu la vortlimon \b ambaŭflanke.
Skemo : \b\d{7}\b
=RegExpMatch(A5:A9, "\b\d{7}\b")
Regex por kongrui telefonnumerojn
Ĉar telefonnumeroj povas esti skribitaj en diversaj formatoj, kongrui ilin postulas pli altnivelan regulan esprimon.
En la suba datumaro, ni serĉos 10-ciferajn nombrojn, kiuj havas 3 ciferojn en la unuaj 2 grupoj kaj 4 ciferojn en la lasta grupo. La grupoj povas esti apartigitaj per punkto, streketo aŭ spaco. La unua grupo povas aŭ ne esti enfermita inter krampoj.
Skemo: (\(\d{3}\)