Daptar eusi
Dina tutorial ieu, urang bakal nempo leuwih jero ngeunaan cara ngagunakeun regex pikeun nyocogkeun string dina Excel.
Nalika anjeun kudu neangan nilai nu tangtu dina rentang. tina sél, anjeun bakal nganggo fungsi MATCH atanapi XMATCH. Nalika milarian string khusus dina sél, fungsi FIND sareng SEARCH tiasa dianggo. Sareng kumaha anjeun terang upami sél ngandung inpormasi anu cocog sareng pola anu dipasihkeun? Jelas, ku ngagunakeun ungkapan biasa. Tapi out of the box Excel henteu ngadukung regex! Teu hariwang, urang maksakeun :)
Excel VBA Regex fungsina pikeun nyocogkeun senar
Sakumaha jelas pisan tina judulna, supados nganggo ekspresi biasa. dina Excel, Anjeun kudu nyieun fungsi sorangan. Kabeneran, VBA Excel gaduh inbuilt RegExp obyék, anu anjeun tiasa dianggo dina kode anjeun sapertos anu dipidangkeun di handap ieu:
Fungsi Umum RegExpMatch(input_range As Range, pattern As String , Optional match_case As Boolean = True ) As Varian Taram arRes () Salaku Varian 'asép Sunandar Sunarya pikeun nyimpen hasil Taram iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Salaku Long 'indéks baris ayeuna dina rentang sumber, indéks kolom ayeuna dina rentang sumber, jumlah baris, cacah tina kolom Dina Kasalahan GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ( "VBScript.RegExp") regex.pattern = pattern regex.Global = True regex.MultiLine = True If True = match_case Then regex.ignorecase = Palsu Lain regex.ignorecase = True Tungtungéksprési.Pola : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b
Pikeun leuwih paham kana kajadian di dieu, hayu urang titénan unggal bagian. :
- Ngaran pamaké bisa ngawengku hurup, angka, garis handap, titik jeung hyphens. Émut yén \w cocog sareng hurup, digit atanapi underscore, kami nampi regex ieu: [\w\.\-]+
- Ngaran domain tiasa kalebet hurup ageung sareng hurup leutik, digit, hyphens (tapi henteu dina posisi kahiji atawa panungtungan) jeung titik-titik (bisi subdomains). Kusabab underscores henteu diidinan, tinimbang \w kami nganggo 3 set karakter anu béda: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
- Domain tingkat luhur diwangun ku hiji titik dituturkeun ku hurup gede jeung aksara leutik. Bisa ngandung ti 2 nepi ka 24 hurup (TLD pangpanjangna ayeuna aya): \.[A-Za-z]{2,24}
Catetan. Pola nganggap nami domain ngandung 2 atanapi langkung karakter alfanumerik.
Kalayan téks aslina dina A5 jeung pola dina A5, rumusna kieu:
=RegExpMatch(A5, $A$2)
Atawa anjeun bisa maké nu biasa nu leuwih basajan. éksprési pikeun validasi surélék ku hurup leutik atawa hurup badag:
Pola : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b
Tapi jieun rumus anjeun case-insensitive:
=RegExpMatch(A5, $A$2, FALSE)
Rumus Excel IF kalawan regex cocok
Kusabab kanyataan yén inbuilt jeung customfungsina saluyu sareng saé, teu aya anu ngahalangan anjeun ngagunakeun éta babarengan dina hiji rumus.
Pikeun mulang atanapi ngitung hiji hal upami ekspresi biasa cocog sareng anu sanés upami henteu cocog, selapkeun RegExpMatch khusus. fungsina dina téks logis IF:
IF(RegExpMatch(…), [value_if_true], [value_if_false])Contona, lamun string dina A5 ngandung alamat surélék nu sah, anjeun bisa balik "Leres"; disebutkeun "Henteu".
=IF(RegExpMatch(A5, $A$2,), "Yes", "No")
Itung lamun regex cocog
Kusabab fungsi Excel asli teu ngarojong ekspresi biasa, éta teu mungkin nempatkeun regex langsung dina fungsi COUNTIS atanapi COUNTIFS. Untungna, anjeun tiasa niru pungsionalitas ieu nganggo pungsi khusus urang.
Upami anjeun parantos nganggo regex pikeun nyocogkeun nomer telepon sareng ngahasilkeun hasil dina kolom B. Pikeun milarian sabaraha sél anu ngandung nomer telepon, anjeun ngan ukur peryogi. pikeun ngitung nilai BENER dina B5:B9. Sareng éta tiasa gampang dilakukeun nganggo rumus COUNTIF standar:
=COUNTIF(B5:B9, TRUE)
Teu hoyong kolom tambahan dina lembar kerja anjeun? Henteu masalah. Émut yén fungsi khusus urang tiasa ngolah sababaraha sél sakaligus sareng SUM Excel tiasa nambihan nilai-nilai dina array, ieu anu anjeun lakukeun:
- Nyadiakeun rujukan rentang ka RegExpMatch, ku kituna éta mulihkeun Asép Sunandar Sunarya nilai BENER jeung PALSU.
- Paké négasi ganda (--) pikeun maksakeun nilai logis kana hiji jeungnol.
- Kéngingkeun pungsi SUM pikeun nambahkeun 1 jeung 0 dina array nu dihasilkeun.
=SUM(--RegExpMatch(A5:A9, $A$2))
Pacocokan regex kalawan Ultimate Suite
Pamaké Ultimate Suite kami bisa ngungkit opat fungsi Regex kuat tanpa nambahkeun kode VBA wae kana workbooks maranéhna sabab mulus terpadu kana Excel salila instalasi add-in. Pungsi custom kami diolah ku mesin .NET RegEx standar sareng ngadukung ekspresi reguler klasik anu lengkep.
Kumaha cara ngagunakeun fungsi RegexMatch khusus
Anggap anjeun parantos dipasang Ultimate Suite versi panganyarna ( 2021.4 atanapi engké), anjeun tiasa ngadamel rumus Regex Match ku dua léngkah basajan:
- Dina tab Ablebits Data , dina grup Teks , klik Regex Tools .
- Pilih string sumber.
- Asupkeun pola anjeun.
- Pilih pilihan Cocok .
- Pikeun hasil jadi rumus, lain nilai, pilih Selapkeun salaku rumus kotak centang.
- Klik tombol Cocok .
Sakedap deui, pungsi AblebitsRegexMatch diselapkeun dina kolom anyar di sisi katuhu data anjeun.
Dina screenshot di handap, fungsi mariksa naha string dina kolom A ngandung 7-angka. angka atawa henteu.
Tips:
- Fungsi tion bisa diselapkeun langsung dina sél via kotak dialog Insert Function standar, dimana éta digolongkeun dina AblebitsUDFs .
- Sacara standar, éksprési biasa ditambahkeun kana rumus, tapi anjeun ogé tiasa nyimpen eta dina sél misah. Jang ngalampahkeun ieu, ngan ukur nganggo rujukan sél pikeun argumen ka-2.
- Sacara standar, fungsina sénsitip hurup leutik . Pikeun nyocogkeun hurup-sensitip, paké pola (?i).
Pikeun inpormasi salengkepna, mangga tingali pungsi AblebitsRegexMatch.
Kitu-kitu cara ngalakukeun pencocokan ekspresi biasa dina Excel. Abdi ngahatur nuhun pikeun maca sareng ngarep-ngarep ningali anjeun dina blog kami minggu payun!
Unduh anu sayogi
Contoh Cocog Regex Excel (file .xlsm)
Ultimate Suite 14- dinten vérsi fungsi pinuh (file .exe)
Lamun cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes (1 Pikeun cntInputRows, 1 Pikeun cntInputCols) Pikeun iInputCurRow = 1 Pikeun cntInputRows Pikeun iInputCurCol = 1 Pikeun cntRows (iColsInputCurCol. .Cells(iInputCurRow, iInputCurCol).Value) Next Next RegExpMatch = arRes Exit Function ErrHandl: RegExpMatch = CVErr(xlErrValue) End FunctionTempelkeun kodeu dina redaktur VBA, sarta fungsi RegExpMatch anyar anjeun nyaéta siap dipaké. Upami anjeun teu acan pisan ngalaman VBA, pituduh ieu tiasa ngabantosan: Kumaha cara nyelapkeun kode VBA dina Excel.
Catetan. Saatos ngalebetkeun kode, émut pikeun nyimpen file anjeun salaku buku kerja anu diaktipkeun makro (.xlsm).
Sintaksis RegExpMatch
Pungsi RegExpMatch mariksa naha bagian mana wae tina string sumber cocog jeung ekspresi biasa. Hasilna mangrupa nilai Boolean: BENER lamun sahanteuna hiji patandingan kapanggih, PALSU lamun heunteu.
Pungsi custom urang boga 3 argumen - dua kahiji diperlukeun tur hiji panungtungan pilihan:
RegExpMatch(text , pattern, [match_case])Dimana:
- Teks (diperlukeun) - hiji atawa leuwih senar pikeun diteangan. Bisa disadiakeun salaku rujukan sél atawa rentang.
- Pola (diperlukeun) - ekspresi biasa pikeun cocog. Lamun disimpen langsung dina rumus, pola kudu diapit ku tanda petik ganda.
- Match_case (opsional) - nangtukeun cocokngetik. Lamun BENER atawa dileungitkeun (standar), cocog hal-sénsitip dipigawé; lamun FALSE - case-insensitive.
Pungsina tiasa dianggo dina sadaya vérsi Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 sareng Excel 2010.
3 hal anjeun kudu nyaho ngeunaan RegExpMatch
Sateuacan urang nepi ka itungan praktis, mangga perhatikeun titik-titik di handap ieu anu netelakeun sababaraha téknis:
- Fungsi éta bisa ngolah hiji sél tunggal atawa rentang sél . Dina kasus anu terakhir, hasilna dipulangkeun dina sél tatangga dina bentuk array dinamis, atanapi rentang spill, sapertos anu dipidangkeun dina conto ieu.
- Sacara standar, fungsina sénsitip hurup . Pikeun malire kasus téks, setel argumen match_case ka FALSE. Kusabab watesan VBA Regexp, pola case-insensitive (?i) teu dirojong.
- Upami pola anu sah henteu kapendak, fungsina ngabalikeun PALSU; lamun pola teu valid , a #VALUE! kasalahan lumangsung.
Di handap, anjeun bakal manggihan sababaraha conto regex cocok nu dijieun pikeun kaperluan démo. Urang teu bisa ngajamin yén pola urang bakal jalan faultlessly kalawan rentang lega data input dina lembar kerja nyata Anjeun. Saméméh nempatkeun dina produksi, pastikeun pikeun nguji jeung nyaluyukeun pola sampel urang nurutkeun pangabutuh anjeun.
Kumaha cara ngagunakeun regex pikeun nyocogkeun string dina Excel
Nalika sadaya string nu Anjeun hoyong cocog gaduh pola anu sarua,éksprési biasa mangrupakeun solusi idéal.
Misalna anjeun boga rentang sél (A5:A9) ngandung sagala rupa detil ngeunaan sababaraha item. Anjeun hoyong terang sél mana anu gaduh SKU. Anggap unggal SKU diwangun ku 2 hurup kapital, hiji tanda hubung, jeung 3 digit, anjeun bisa nyocogkeunana ngagunakeun ekspresi ieu.
Pola : \b[A-Z]{2}-\ d{3}\b
Dimana [A-Z]{2} hartina 2 hurup gede ti A nepi ka Z jeung \d{3} hartina 3 angka ti 0 nepi ka 9. Karakter \b ngalambangkeun kecap. wates, hartina SKU mangrupakeun kecap misah, sarta lain bagian tina string badag kayaning 23-MAR-2022.
Kalayan pola ngadegkeun, urang bisa neruskeun nulis rumus. Intina, ngagunakeun fungsi khusus henteu béda ti anu asli. Pas anjeun mimiti ngetik rumus, nami fungsi bakal muncul dina daptar anu disarankeun ku Excel AutoComplete. Tapi, aya sababaraha nuansa dina Dynamic Array Excel (Microsoft 365 sareng Excel 2021) sareng Excel tradisional (2019 sareng versi anu langkung lami).
Cocokkeun string dina hiji sél
Pikeun cocog sareng string. dina sél tunggal, tingal sél éta dina argumen kahiji. Argumen kadua sakuduna ngandung éksprési biasa.
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Pola ogé bisa disimpen dina sél nu geus ditangtukeun, nu dikonci ku rujukan mutlak ($A$2):
=RegExpMatch(A5, $A$2)
Sanggeus ngasupkeun rumus dina sél kahiji, anjeun bisa nyéred ka handap ka sakabéh baris séjén.
Metoda ieudianggo saé dina sadaya vérsi Excel .
Cocokkeun string dina sababaraha sél sakaligus
Pikeun nyocogkeun sababaraha string sareng rumus tunggal, Lebetkeun rujukan rentang dina argumen kahiji:
=RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")
Dina Excel 365 sareng Excel 2021 anu ngadukung susunan dinamis, jalanna kieu - Anjeun ngetik rumus dina sél kahiji, pencét Enter , sarta rumus otomatis tumpah kana sél handap.
Dina Excel 2019 jeung saméméhna, éta ngan ukur dianggo salaku rumus array CSE tradisional, anu diasupkeun dina sauntuyan sél sareng réngsé ku mencét Ctrl + Shift + Enter babarengan.
Regex pikeun cocog angka
Pikeun nyocogkeun hiji digit wae ti 0 nepi ka 9, pake karakter \d dina regex. Gumantung kana tugas husus anjeun, tambahkeun hiji pangukuran anu cocog atawa jieun pola anu leuwih kompleks.
Regex pikeun cocog jeung angka mana wae
Pikeun cocog angka naon wae nu mana wae panjangna, lebetkeun + pangukuran langsung saatos / karakter d, nu nyebutkeun néangan angka nu ngandung 1 atawa leuwih digit.
Pola : \d+
=RegExpMatch(A5:A9, "\d+")
Regex pikeun nyocogkeun jumlah panjang husus
Lamun tujuan anjeun pikeun cocog nilai numerik nu ngandung sajumlah angka nu tangtu, teras paké \d babarengan jeung pangukuran nu luyu.
Contona, pikeun nyocogkeun nomer invoice anu diwangun ku persis 7 digit, anjeun kedah nganggo \d{7}. Nanging, émut yén éta bakal cocog sareng 7saperti nu diharapkeun:
Catetan:
- Konci internasional teu dipariksa, jadi bisa jadi aya atawa teu aya.
- Dina ekspresi biasa, \s nangtung pikeun karakter spasi bodas sapertos spasi, tab, carriage return, atanapi garis anyar. Pikeun ngidinan ukur spasi, pake [-\. ] tinimbang [-\.\s].
- [^13] bakal cocog jeung karakter tunggal nu lain 1 atawa 3.
- [^1-3] bakal cocog jeung karakter tunggal nu lain 1, 2 atanapi 3 (nyaéta angka naon waé ti 1 dugi ka 3).
- Regex di luhur ngan dianggo pikeun baris tunggal string. Dina kasus string milti-garis, ^ jeung $ karakter cocog awal jeung tungtung unggal baris tinimbang awal jeung tungtung string input, ku kituna regex ngan neangan dina baris kahiji.
- Pikeun nyocogkeun string anu henteu dimimitian jeung téks tangtu , paké éksprési biasa saperti ^(?!lemon).*$
- Pikeun nyocogkeun string nu henteu ditungtungan jeung téks nu tangtu , kaasuptungtung string jangkar kana pola pilarian: ^((?!lemon$).)*$
Regex mun NOT cocog karakter
Pikeun manggihan string nu NOT ngandung karakter nu tangtu, Anjeun bisa make kelas karakter negated [^ ] nu cocog nanaon NOT dina kurung. Contona:
Dina daptar nomer telepon, anggap anjeun hoyong milarian nomer anu teu gaduh kode nagara. Émut yén sagala kode internasional kalebet tanda +, anjeun tiasa nganggo kelas karakter [^\+] pikeun milarian string anu henteu ngandung tanda tambah. Penting pikeun sadar yén ekspresi di luhur cocog sareng karakter tunggal anu henteu +. Kusabab nomer telepon tiasa dimana wae dina senar, teu merta di pisan awal, nu * quantifier ditambahkeun mariksa unggal karakter saterusna. Awal ^ jeung tungtung $ jangkar mastikeun yén sakabéh string diolah. Hasilna, urang meunang ekspresi biasa di handap ieu nu nyebutkeun "teu cocog karakter + dina posisi mana wae dina string".
Pola :^[^\+]*$
=RegExpMatch(A5, "^[^\+]*$")
Regex mun NOT cocog string
Sanajan teu aya sintaksis éksprési reguler husus pikeun teu cocog string husus, anjeun bisa emulate kabiasaan ieu ku cara maké lookahead négatip.
Anggap anjeun hayang manggihan string nu henteu ngandung kecap "lemon". Ungkapan biasa ieu bakal dianggo saréat:
Pola : ^((?!lemon).)*$
Jelas, sababaraha katerangan diperlukeun di dieu. The lookahead négatip (?!lemon) kasampak ka katuhu pikeun nempo lamun aya euweuh kecap "lemon" payun. Upami "lemon" henteu aya, maka titikna cocog sareng karakter naon waé kecuali garis putus. Ekspresi di luhur ngan ukur ngalakukeun hiji cék, sareng kuantifier * ngulang deui nol atanapi langkung kali, ti mimiti senar anu dilabuhkeun ku ^ dugi ka tungtung senar anu ditabuh ku $.
Pikeun malire kasus téks, urang nyetel argumen ka-3 ka FALSE pikeun nyieun fungsi urang case-insensitive:
=RegExpMatch(A5, $A$2, FALSE)
Tips sareng catetan:
Case insensitive matching
Dina éksprési biasa klasik, aya pola husus pikeun cocog hal-teu merhatikeun (? abdi), nu teu dirojong di VBA RegExp. Pikeun ngatasi watesan ieu, fungsi khusus urang nampi argumen pilihan ka-3 anu dingaranan match_case . Pikeun ngalakukeun pencocokan hurup-sensitip, cukup setel ka FALSE.
Misalna anjeun hoyong ngidentipikasi kaping sapertos 1-Mar-22 atanapi 01-MAR-2022. Pikeun cocog sareng format dd-mmm-yyyy sareng d-mmm-yyy , kami nganggo éksprési biasa di handap ieu.
Pola : \b\d{1,2}- (Jandigit mana wae dina string kaasup angka 10-angka atawa 100-angka. Upami ieu sanés anu anjeun milarian, nempatkeun kecap wates \b dina dua sisi.
Pola : \b\d{7}\b
=RegExpMatch(A5:A9, "\b\d{7}\b")
Regex pikeun cocog jeung nomer telepon
Kusabab nomer telepon bisa ditulis dina rupa-rupa format, nyocogkeunana merlukeun ekspresi biasa nu leuwih canggih.
Dina set data di handap, urang bakal milarian nomer 10-angka anu ngagaduhan 3 digit dina 2 grup kahiji sareng 4 angka dina grup terakhir. Grup bisa dipisahkeun ku titik, hyphen atawa spasi. Grup kahiji bisa atawa teu bisa diasupkeun kana kurung.
Pola: (\(\d{3}\)