Excel Regex: linganisha kamba kwa kutumia misemo ya kawaida

  • Shiriki Hii
Michael Brown

Katika mafunzo haya, tutakuwa na ufahamu wa kina wa jinsi ya kutumia regex ili kulinganisha mifuatano katika Excel.

Unapohitaji kupata thamani fulani katika masafa. ya seli, ungetumia chaguo la kukokotoa la MATCH au XMATCH. Unapotafuta mfuatano mahususi kwenye kisanduku, vipengele vya FIND na TAFUTA vinafaa. Na unajuaje ikiwa kisanduku kina maelezo yanayolingana na mchoro fulani? Ni wazi, kwa kutumia maneno ya kawaida. Lakini nje ya kisanduku Excel haiungi mkono regexes! Hakuna wasiwasi, tutailazimisha :)

    Kitendaji cha Excel VBA Regex ili kulinganisha mifuatano

    Kwa kuwa ni wazi kabisa kutoka kwa kichwa, ili kutumia vielezi vya kawaida. katika Excel, unahitaji kuunda kazi yako mwenyewe. Kwa bahati nzuri, VBA ya Excel ina kitu kilichojengwa ndani RegExp , ambacho unaweza kutumia katika msimbo wako kama inavyoonyeshwa hapa chini:

    Public Function RegExpMatch(input_range As Range, pattern As String , Optional match_case As Boolean = True ) Kama Variant Dim arRes() Kama safu ya Lahaja ya kuhifadhi matokeo Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Kama faharasa ndefu ya safu mlalo ya sasa katika safu chanzo, faharasa ya safu wima ya sasa katika safu chanzo, hesabu ya safu mlalo, hesabu ya safu wima Kwenye Hitilafu GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = Kweli Ikiwa Kweli = match_case Kisha regex.ignorecase = False = Uongo Else. Mwishomisemo.

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

    Ili kuelewa vyema kinachoendelea hapa, hebu tuangalie kwa karibu kila sehemu. :

    • Jina la mtumiaji linaweza kujumuisha herufi, nambari, mistari chini, nukta na vistari. Tukikumbuka kuwa \w inalingana na herufi, tarakimu au kistari chochote, tunapata regex ifuatayo: [\w\.\-]+
    • Jina la kikoa linaweza kujumuisha herufi kubwa na ndogo, tarakimu, viasili (lakini si katika nafasi ya kwanza au ya mwisho) na vitone (ikiwa ni vikoa vidogo). Kwa kuwa mistari chini hairuhusiwi, badala ya \w tunatumia seti 3 tofauti za herufi: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
    • Kikoa cha kiwango cha juu kina kitone kinachofuatwa na herufi kubwa na ndogo. Inaweza kuwa na kuanzia herufi 2 hadi 24 (TLD ndefu zaidi iliyopo kwa sasa): \.[A-Za-z]{2,24}

    Kumbuka. Mchoro unadhania kuwa jina la kikoa lina herufi 2 au zaidi za alphanumeric.

    Kwa maandishi asilia katika A5 na mchoro katika A5, fomula inachukua umbo hili:

    =RegExpMatch(A5, $A$2)

    Au unaweza kutumia kawaida rahisi zaidi. usemi wa uthibitishaji wa barua pepe ukiwa na herufi ndogo au kubwa:

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

    Lakini fanya fomula yako kuwa isiyojali:

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

    fomula ya Excel IF iliyo na regex inayolingana

    Kwa sababu ya ukweli kwamba imeundwa ndani na maalumvipengele vya kukokotoa vinaendana vizuri, hakuna kitu ambacho kingekuzuia kuzitumia pamoja katika fomula moja.

    Ili kurudisha au kukokotoa kitu ikiwa usemi wa kawaida unalingana na kitu kingine ikiwa haulingani, pachika RegExpMatch maalum. kazi katika maandishi ya kimantiki ya IF:

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

    Kwa mfano, ikiwa mfuatano katika A5 una barua pepe halali, unaweza kurudisha "Ndiyo"; vinginevyo "Hapana".

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

    Hesabu ikiwa regex imelinganishwa

    Kwa sababu vitendaji asilia vya Excel havitumii usemi wa kawaida, ni haiwezekani kuweka regex moja kwa moja kwenye kitendakazi cha COUNTIS au COUNTIFS. Kwa bahati nzuri, unaweza kuiga utendakazi huu kwa kutumia utendakazi wetu maalum.

    Tuseme umetumia regex kulinganisha nambari za simu na kutoa matokeo katika safu wima B. Ili kujua ni seli ngapi zilizo na nambari za simu, unahitaji tu kuhesabu thamani za TRUE katika B5:B9. Na hilo linaweza kufanywa kwa urahisi kwa kutumia fomula ya kawaida ya COUNTIF:

    =COUNTIF(B5:B9, TRUE)

    Je, hutaki safu wima zozote za ziada katika lahakazi yako? Hakuna shida. Kwa kuzingatia kwamba utendakazi wetu maalum unaweza kuchakata visanduku vingi kwa wakati mmoja na Excel SUM inaweza kuongeza thamani katika safu, hivi ndivyo unavyofanya:

    • Toa marejeleo ya masafa kwa RegExpMatch, ili irejeshe safu ya thamani za TRUE na FALSE.
    • Tumia ukanushaji maradufu (--) ili kulazimisha thamani za kimantiki kwa zile nasufuri.
    • Pata chaguo za kukokotoa za SUM ili kuongeza 1 na 0 katika safu inayofuata.

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

    Regex inayolingana na Ultimate Suite

    Watumiaji wa Ultimate Suite yetu wanaweza kutumia vitendaji vinne vya nguvu vya Regex bila kuongeza msimbo wowote wa VBA kwenye vitabu vyao vya kazi kwa kuwa vimeunganishwa vizuri katika Excel wakati wa usakinishaji wa programu jalizi. Vitendaji vyetu maalum vinachakatwa na injini ya kawaida ya .NET RegEx na inaauni usemi kamili wa kawaida wa kawaida.

    Jinsi ya kutumia kitendaji maalum cha RegexMatch

    Ikizingatiwa kuwa una toleo jipya zaidi la Ultimate Suite iliyosakinishwa ( 2021.4 au baadaye), unaweza kuunda fomula ya Regex Match kwa hatua mbili rahisi:

    1. Kwenye kichupo cha Ablebits Data , katika Nakala kikundi, bofya. Zana za Regex .

  • Kwenye kidirisha cha Zana za Regex , fanya yafuatayo:
    • Chagua mifuatano ya chanzo.
    • Ingiza mchoro wako.
    • Chagua chaguo la Mechi .
    • Ili kuwa na matokeo kama fomula, si thamani, chagua Ingiza kama fomula kisanduku tiki.
    • Bofya kitufe cha Mechi .

    Muda mfupi baadaye, kitendakazi cha AblebitsRegexMatch kimeingizwa kwenye safu wima mpya upande wa kulia wa data yako.

    Katika picha ya skrini iliyo hapa chini, chaguo la kukokotoa hukagua kama mifuatano katika safu wima A ina tarakimu 7. nambari au la.

    Vidokezo:

    • Fun tion inaweza kuingizwa moja kwa moja kwenye seli kupitia kisanduku cha kidadisi cha Ingiza Kazi , ambapo imeainishwa chini ya AblebitsUDFs .
    • Kwa chaguo-msingi, usemi wa kawaida huongezwa kwenye fomula, lakini pia unaweza kuweka katika seli tofauti. Kwa hili, tumia tu rejeleo la seli kwa hoja ya 2.
    • Kwa chaguo-msingi, chaguo-msingi ni nyeti-kesi . Kwa ulinganishaji ambao haujalishi, tumia mchoro wa (?i).

    Kwa maelezo zaidi, tafadhali angalia chaguo la kukokotoa la AblebitsRegexMatch.

    Hiyo ndivyo jinsi ya kulinganisha usemi wa kawaida katika Excel. Ninakushukuru kwa kusoma na kutarajia kukuona kwenye blogu yetu wiki ijayo!

    Vipakuliwa vinavyopatikana

    Mifano ya Excel Regex Match (.xlsm file)

    Ultimate Suite 14- toleo la siku linalofanya kazi kikamilifu (.exe faili)

    Iwapo cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) Kwa iInputCurRow = 1 Kwa cntInputRows For iInputCurntInput arRes (InputCurInput arRext) iInputCurInput arRejs = 1. .Cells(iInputCurRow, iInputCurCol).Thamani) Inayofuata RegExpMatch = arRes Toka Kazi ErrHandl: RegExpMatch = CVERr(xlErrValue) Kazi ya Mwisho

    Bandika msimbo katika kihariri cha VBA, na Reg> kazi yako mpya ni ExpMatch tayari kwa matumizi. Ikiwa huna uzoefu sana na VBA, mwongozo huu unaweza kukusaidia: Jinsi ya kuingiza msimbo wa VBA katika Excel.

    Kumbuka. Baada ya kuingiza msimbo, kumbuka kuhifadhi faili yako kama kitabu cha kazi kilichowezeshwa kwa jumla (.xlsm).

    Sintaksia ya RegExpMatch

    Chaguo za kukokotoa za RegExpMatch hukagua kama sehemu yoyote ya mfuatano wa chanzo inalingana na usemi wa kawaida. Matokeo yake ni thamani ya Boolean: TRUE ikiwa angalau moja inayolingana itapatikana, FALSE vinginevyo.

    Kitendaji chetu maalum kina hoja 3 - mbili za kwanza zinahitajika na ya mwisho ni ya hiari:

    RegExpMatch(text , pattern, [match_case])

    Wapi:

    • Maandishi (inahitajika) - mfuatano mmoja au zaidi wa kutafuta. Inaweza kutolewa kama kisanduku au marejeleo ya masafa.
    • Muundo (inahitajika) - usemi wa kawaida wa kulinganisha. Inapowekwa moja kwa moja kwenye fomula, mchoro lazima uambatanishwe katika manukuu mara mbili.
    • Kesi_ya Match (si lazima) - inafafanua inayolingana.aina. Iwapo TRUE au imeachwa (chaguo-msingi), ulinganishaji unaozingatia ukubwa unafanywa; ikiwa FALSE - haizingatii kesi.

    Chaguo hili hufanya kazi katika matoleo yote ya Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 na Excel 2010.

    vitu 3 unavyo inafaa kujua kuhusu RegExpMatch

    Kabla hatujafikia hesabu za vitendo, tafadhali zingatia mambo yafuatayo ambayo yanafafanua baadhi ya vipengele vya kiufundi:

    1. Chaguo za kukokotoa zinaweza kuchakata kisanduku kimoja au fungu la visanduku . Katika hali ya mwisho, matokeo yanarejeshwa katika visanduku jirani katika umbo la safu inayobadilika, au masafa ya kumwagika, kama inavyoonyeshwa katika mfano huu.
    2. Kwa chaguo-msingi, chaguo-msingi ya kukokotoa ni nyeti-kasi. 9>. Ili kupuuza kesi ya maandishi, weka hoja ya match_case iwe FALSE. Kwa sababu ya mapungufu ya VBA Regexp, mchoro usiojali kasoro (?i) hautumiki.
    3. Ikiwa mchoro halali haupatikani, chaguo za kukokotoa hurejesha FALSE; ikiwa muundo ni batili , #THAMANI! hitilafu hutokea.

    Hapo chini, utapata mifano michache ya ulinganifu wa regex ambayo iliundwa kwa madhumuni ya maonyesho. Hatuwezi kukuhakikishia kuwa ruwaza zetu zitafanya kazi bila dosari na anuwai pana ya data ya ingizo katika laha zako za kazi halisi. Kabla ya kuweka toleo la umma, hakikisha kuwa umejaribu na kurekebisha muundo wa sampuli zetu kulingana na mahitaji yako.

    Jinsi ya kutumia regex kulinganisha mifuatano katika Excel

    Wakati mifuatano yote unayotaka kulinganisha ina muundo sawa,semi za kawaida ni suluhu bora.

    Tuseme una visanduku vingi (A5:A9) vyenye maelezo mbalimbali kuhusu baadhi ya vipengee. Ungependa kujua ni seli gani zilizo na SKU. Kwa kuchukulia kuwa kila SKU ina herufi kubwa 2, kistari, na tarakimu 3, unaweza kuzilinganisha kwa kutumia usemi ufuatao.

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

    Ambapo [A-Z]{2} ina maana ya herufi kubwa 2 kutoka A hadi Z na \d{3} inamaanisha tarakimu zozote 3 kutoka 0 hadi 9. Herufi \b inaashiria neno. mpaka, kumaanisha SKU ni neno tofauti, na si sehemu ya mfuatano mkubwa zaidi kama vile 23-MAR-2022.

    Tukiwa na mchoro uliowekwa, tunaweza kuendelea na kuandika fomula. Kimsingi, kutumia kitendakazi maalum sio tofauti na asilia. Mara tu unapoanza kuandika fomula, jina la chaguo la kukokotoa litaonekana kwenye orodha iliyopendekezwa na Excel's AutoComplete. Hata hivyo, kuna nuances kadhaa katika Dynamic Array Excel (Microsoft 365 na Excel 2021) na Excel ya jadi (2019 na matoleo ya awali).

    Linganisha kamba katika kisanduku kimoja

    Ili kulinganisha mfuatano katika seli moja, rejelea seli hiyo katika hoja ya kwanza. Hoja ya pili inapaswa kuwa na usemi wa kawaida.

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

    Mchoro pia unaweza kuwekwa katika kisanduku kilichobainishwa awali, ambacho kimefungwa kwa marejeleo kamili ($A$2):

    =RegExpMatch(A5, $A$2)

    Baada ya kuingiza fomula katika kisanduku cha kwanza, unaweza kuiburuta hadi kwenye safu mlalo nyingine zote.

    Njia hiiinafanya kazi kwa uzuri katika matoleo yote ya Excel .

    Linganisha mifuatano katika visanduku vingi kwa wakati mmoja

    Ili kulinganisha mifuatano mingi na fomula moja, jumuisha marejeleo ya masafa katika hoja ya kwanza:

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

    Katika Excel 365 na Excel 2021 inayoauni safu zinazobadilika, inafanya kazi kwa njia hii - unacharaza fomula katika kisanduku cha kwanza, gonga Enter , na fomula hiyo kumwagika kiotomatiki hadi kwenye visanduku vilivyo hapa chini.

    Katika Excel 2019 na mapema, ita inafanya kazi tu kama fomula ya kawaida ya safu ya CSE, ambayo huingizwa katika visanduku vingi na kukamilishwa kwa kubofya Ctrl + Shift + Enter vitufe pamoja.

    Regex ili kulinganisha nambari

    Regex ili kulinganisha nambari

    Ili kulinganisha tarakimu yoyote kutoka 0 hadi 9, tumia \d herufi katika regex. Kulingana na kazi yako mahususi, ongeza kihesabu kinachofaa au unda mchoro changamano zaidi.

    Regex ili kufanana na nambari yoyote

    Ili kulinganisha nambari yoyote ya urefu wowote, weka kipimaji + mara baada ya / d, inayosema kutafuta nambari zilizo na tarakimu 1 au zaidi.

    Muundo : \d+

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

    Regex ili ilingane na nambari ya urefu mahususi

    Ikiwa lengo lako ni kulinganisha nambari zilizo na idadi fulani ya tarakimu, basi tumia \d pamoja na kihesabu kinafaa.

    Kwa mfano, ili kulinganisha nambari za ankara zenye tarakimu 7 haswa, ungetumia \d{7}. Walakini, tafadhali kumbuka kuwa italingana na 7kama inavyotarajiwa:

    Vidokezo:

    • Misimbo ya kimataifa haijaangaliwa, kwa hivyo inaweza kuwepo au isiwepo.
    • Katika misemo ya kawaida, \s inawakilisha herufi yoyote ya nafasi nyeupe kama vile nafasi, kichupo, urejeshaji wa gari, au laini mpya. Ili kuruhusu nafasi pekee, tumia [-\. ] badala ya [-\.\s].
    • Regex ili HAIlingane na herufi

      Ili kupata mifuatano ambayo HAINA herufi fulani, unaweza kutumia aina za herufi zilizopuuzwa [^ ] zinazolingana chochote NOT katika mabano. Kwa mfano:

      • [^13] italingana na herufi yoyote ambayo si 1 au 3.
      • [^1-3] italingana na herufi yoyote ambayo si 1, 2 au 3 (yaani tarakimu yoyote kutoka 1 hadi 3).

      Katika orodha ya nambari za simu, tuseme unataka kupata zile ambazo hazina msimbo wa nchi. Kwa kuzingatia kwamba msimbo wowote wa kimataifa unajumuisha ishara +, unaweza kutumia darasa la herufi [^\+] kupata mifuatano ambayo haina alama ya kuongeza. Ni muhimu kutambua kuwa usemi ulio hapo juu unalingana na herufi yoyote ambayo sio +. Kwa sababu nambari ya simu inaweza kuwa mahali popote kwenye mfuatano, si lazima mwanzoni kabisa, kipimaji * kinaongezwa ili kuangalia kila herufi inayofuata. Anza ^ na mwisho $ nanga huhakikisha kwamba mfuatano mzima unachakatwa. Kama matokeo, tunapata msemo ulio hapa chini wa kawaida unaosema "usilingane na herufi + katika nafasi yoyote kwenye mfuatano".

      Muundo :^[^\+]*$

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

      Regex HAITAlingani kamba

      Ingawa hakuna syntax maalum ya kawaida ya kujieleza kwa isiyolingana na mfuatano mahususi, unaweza kuiga tabia hii kwa kutumia mtazamo hasi.

      Tuseme ungependa kupata tungo ambazo hazina neno "ndimu". Usemi huu wa kawaida utafanya kazi nzuri:

      Muundo : ^((?!ndimu).)*$

      Ni wazi, baadhi ya maelezo yanahitajika hapa. Mtazamo hasi (?!ndimu) hutazama kulia ili kuona kama hakuna neno "ndimu" mbele. Ikiwa "limau" haipo, basi nukta inalingana na herufi yoyote isipokuwa kizuizi cha mstari. Usemi ulio hapo juu hufanya tiki moja tu, na kihesabu * kinarudia mara sifuri au zaidi, kuanzia mwanzo wa mfuatano uliosisitizwa na ^ hadi mwisho wa mfuatano uliosisitizwa kwa $.

      Ili kupuuza kisanduku cha maandishi, tunaweka hoja ya 3 kuwa FALSE ili kufanya utendakazi wetu kuwa usiojali:

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

      Vidokezo na madokezo:

      • Regex iliyo hapo juu inafanya kazi kwa laini-moja tu. Katika kesi ya mifuatano ya safu-milti, herufi ^ na $ zinalingana na mwanzo na mwisho wa kila mstari badala ya mwanzo na mwisho wa mfuatano wa ingizo, kwa hivyo regex hutafuta tu kwenye mstari wa kwanza.
      • Ili kulinganisha mifuatano ambayo haianza na maandishi fulani , tumia usemi wa kawaida kama vile ^(?!limamu).*$
      • Ili kulinganisha mifuatano ambayo haimaliziki na maandishi fulani , jumuishamfuatano wa mwisho unatia nanga katika muundo wa utafutaji: ^((?!lemons$).)*$

      Kesi isiyojali ulinganifu

      Katika vielezi vya kawaida vya kawaida, kuna muundo maalum wa ulinganishaji usiojali kesi (?i), ambao hautumiki katika VBA RegExp. Ili kuondokana na kizuizi hiki, utendakazi wetu maalum unakubali hoja ya tatu ya hiari inayoitwa match_case . Ili kufanya ulinganishi usiojali kesi, iweke FALSE.

      Tuseme ungependa kutambua tarehe kama vile 1-Mar-22 au 01-MAR-2022. Ili kulinganisha umbizo la dd-mmm-yyyy na d-mmm-yy , tunatumia usemi ufuatao wa kawaida.

      Muundo : \b\d{1,2}-(Jantarakimu popote kwenye mfuatano ikijumuisha nambari ya tarakimu 10 au tarakimu 100. Ikiwa hii sio unayotafuta, weka neno mpaka \b pande zote mbili.

      Muundo : \b\d{7}\b

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

      Regex ili kulinganisha nambari za simu

      Kwa kuwa nambari za simu zinaweza kuandikwa katika miundo mbalimbali, kuzipatanisha kunahitaji usemi wa kawaida wa hali ya juu zaidi.

      Katika mkusanyiko wa data ulio hapa chini, tutatafuta nambari za tarakimu 10 ambazo zina tarakimu 3 katika makundi 2 ya kwanza na tarakimu 4 katika kundi la mwisho. Vikundi vinaweza kutengwa kwa kipindi, hyphen au nafasi. Kundi la kwanza linaweza kuambatanishwa au lisiambatanishwe kwenye mabano.

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

    Michael Brown ni mpenda teknolojia aliyejitolea na mwenye shauku ya kurahisisha michakato changamano kwa kutumia zana za programu. Akiwa na uzoefu wa zaidi ya muongo mmoja katika tasnia ya teknolojia, ameboresha ujuzi wake katika Microsoft Excel na Outlook, pamoja na Majedwali ya Google na Hati. Blogu ya Michael imejitolea kushiriki maarifa na ujuzi wake na wengine, kutoa vidokezo na mafunzo ambayo ni rahisi kufuata ili kuboresha tija na ufanisi. Iwe wewe ni mtaalamu aliyebobea au umeanza, blogu ya Michael inatoa maarifa muhimu na ushauri wa vitendo ili kupata manufaa zaidi kutoka kwa zana hizi muhimu za programu.