Sadržaj
Želite riješiti razmake na najučinkovitiji način? Koristite regularne izraze za uklanjanje svih razmaka u ćeliji, zamjenu više razmaka s jednim znakom, smanjenje razmaka samo između brojeva i više.
Koje god ulazne podatke koristite, teško da ćete naići na skup podataka bez razmaka. U većini slučajeva razmak je dobar - koristite ga za vizualno odvajanje različitih informacija kako biste ih lakše uočili. U nekim situacijama, međutim, može postati zlo - dodatni razmaci mogu zabrljati vaše formule i učiniti vaše radne listove gotovo nemogućima za rukovanje.
Zašto koristiti regularne izraze za skraćivanje razmaka u Excelu?
Prije nego što zaronimo u detalje korištenja regularnih izraza za uklanjanje razmaka u Excel radnim listovima, želio bih se pozabaviti pitanjem koje mi prvo pada na pamet - zašto su nam potrebni regularni izrazi kada Excel već ima TRIM funkciju?
Da bismo razumjeli razliku, pogledajmo što se smatra razmakom u svakom slučaju:
- Ugrađena funkcija TRIM može ukloniti samo razmak koji ima vrijednost 32 u 7-bitnom ASCII sustavu.
- Regularni izrazi mogu identificirati nekoliko različitih oblika razmaka kao što su razmak ( ), tabulator (\t), povratak na početak (\r) i novi linija (\n). Dodatno, postoji razmak (\s) koji odgovara svim ovim tipovima i izuzetno je koristan za čišćenje sirovog unosapodataka.
Znajući točno što se događa iza kulisa, puno je lakše pronaći rješenje, zar ne?
Kako omogućiti regularne izraze u Excelu
Dobro je poznata činjenica da Excel izvan okvira ne podržava regularne izraze. Da biste ih omogućili, morate stvoriti prilagođenu VBA funkciju. Srećom, već imamo jedan, pod nazivom RegExpReplace . Čekaj, čemu "zamjena" kad govorimo o uklanjanju? U Excel jeziku, "ukloni" je samo još jedna riječ za "zamijeni praznim nizom" :)
Da biste dodali funkciju u svoj Excel, jednostavno kopirajte njen kod s ove stranice, zalijepite ga u VBA uređivač , i spremite svoju datoteku kao radnu knjigu s omogućenom makronaredbom (.xlsm).
Ovdje je sintaksa funkcije za vašu referencu:
RegExpReplace(text, pattern, replacement, [instance_num] , [match_case])Prva tri argumenta su obavezna, posljednja dva su izborna.
Gdje:
- Tekst - originalni niz za traži u.
- Uzorak - regularni izraz za traženje.
- Zamjena - tekst kojim se treba zamijeniti. Da biste uklonili bjeline , ovaj biste argument postavili na bilo koje:
- prazan niz ("") da biste skratili apsolutno sve razmake
- razmak znak (" ") za zamjenu više razmaka s jednim razmakom
- Instance_num (neobavezno) - broj instance. U većini slučajeva izostavit ćete ga kako biste zamijenili sve instance(zadano).
- Match_case (izborno) - Booleova vrijednost koja pokazuje treba li odgovarati (TRUE) ili zanemariti (FALSE) velika i mala slova teksta. Za razmake, to je irelevantno i stoga je izostavljeno.
Za više informacija pogledajte funkciju RegExpReplace.
Kako ukloniti razmake s regularnim izrazom - primjeri
S Funkcija RegExpReplace dodana je u vašu radnu knjigu, pozabavimo se različitim scenarijima jedan po jedan.
Uklonite sve razmake pomoću regularnog izraza
Da biste uklonili sve razmake u nizu, jednostavno tražite bilo koji znak razmaka, uključujući razmak, tabulator, znak za početak i pomak za novi redak i zamijenite ih praznim nizom ("").
Uzorak : \s+
Zamjena : ""
Pod pretpostavkom da je izvorni niz u A5, formula u B5 je:
=RegExpReplace(A5, "\s+", "")
Da biste lakše upravljali svojim uzorcima , možete unijeti regularni izraz u unaprijed definiranu ćeliju i unijeti ga u formulu pomoću apsolutne reference kao što je $A$2, tako da će adresa ćelije ostati nepromijenjena prilikom kopiranja formule niz stupac.
=RegExpReplace(A5, $A$2, "")
Uklonite više od jednog razmaka
Za uklanjanje dodatnog razmaka (tj. više od n jedan uzastopni razmak), upotrijebite isti regularni izraz \s+ ali zamijenite pronađena podudaranja s jednim razmakom.
Uzorak : \s+
Zamjena : " "
=RegExpReplace(A5, "\s+", " ")
Molimo obratite pozornost da ova formula zadržava jedan razmak ne samo izmeđuispod skupa podataka, pretpostavimo da želite skratiti sve razmake na početku/završetku i sve osim jednog razmaka između, zadržavajući više redaka netaknutima. Da biste ispunili zadatak, trebat će vam dvije različite funkcije RegExpReplace.
Prva funkcija zamjenjuje više razmaka s jednim razmakom.
=RegExpReplace(A5, " +", " ")
Druga uklanja razmake od početka i kraja retka:
=RegExpReplace(A5, "^ +| +$", "")
Samo ugniježdite dvije funkcije jednu u drugu:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
I dobit ćete savršen rezultat:
Regex za zamjenu više razmaka jednim znakom
U slučaju da želite ukloniti sve razmake iz niza i zamijeniti svaku grupu uzastopnih razmaka s određenim znakom, ovo je ono što trebate učiniti:
Prvo, upotrijebite ovaj regularni izraz za rezanje početnih i završnih bjelina:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
Zatim poslužite gornju funkciju na argument text druge RegExpReplace koja zamjenjuje jedan ili više uzastopnih razmaka sa znakom koji navedete, npr. crtica:
Uzorak : \s+
Zamjena : -
Pod pretpostavkom da je izvorni niz u A8, formula ima ovaj oblik:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
Ili možete unijeti uzorke i zamjene u zasebne ćelije kao što je prikazano na snimci zaslona:
Regex za uklanjanje praznih redaka
Ovo je pitanje koje često postavljaju korisnici koji imaju više redaka u jednoj ćeliji: "U mojim ćelijama ima puno praznih redaka. Postoji li način dariješiti ih se osim prolaska kroz svaku ćeliju i ručnog brisanja svakog retka?" Odgovor: To je jednostavno!
Za spajanje praznih redaka koji nemaju niti jedan znak od početka ^ trenutnog retka do sljedeći redak \n, regularni izraz je:
Uzorak : ^\n
Ako vaši vizualno prazni reci sadrže razmake ili kartice, koristite ovaj regularni izraz:
Uzorak : ^[\t ]*\n
Samo zamijenite regularni izraz praznim nizom koristeći ovu formulu i svi prazni redovi će nestati odjednom!
=RegExpReplace(A5, $A$2, "")
Uklanjanje razmaka s RegEx alatima
Gornji primjeri demonstrirali su samo mali dio prekrasnih mogućnosti koje pružaju regularni izrazi. Nažalost, ne svi značajke klasičnih regularnih izraza dostupne su u VBA.
Srećom, alati RegEx koji su uključeni u naš Ultimate Suite slobodni su od ovih ograničenja budući da ih obrađuje Microsoftov .NET RegEx mehanizam. To vam omogućuje da konstruirate sofisticiranije obrasce koji ne podržava VBA RegExp. Belo w naći ćete primjer takvog redovnog izraza.
Regex za uklanjanje razmaka između brojeva
U alfanumeričkom nizu, pretpostavimo da želite ukloniti razmake samo između brojeva, tako da niz kao što je "A 1 2 B" postaje "A 12 B".
Za podudaranje razmaka između bilo koje dvije znamenke, možete upotrijebiti sljedeće razgledavanje:
Uzorak : (?<=\d)\s+(?=\d)
Za stvaranje formule na temeljuna gornjim regularnim izrazima, evo dva jednostavna koraka za izvesti:
- Na kartici Ablebits Data , u grupi Tekst kliknite Regex Alati .
- Na oknu Alati za regularne izraze odaberite izvorne podatke, unesite svoj regularni izraz, odaberite Ukloni i pritisnite Ukloni .
Da biste dobili rezultate kao formule, a ne vrijednosti, ne zaboravite staviti kvačicu u potvrdni okvir Umetni kao formulu .
Uskoro ćete vidjeti funkciju AblebitsRegexRemove umetnutu u novi stupac s desne strane izvornih podataka.
Alternativno, možete unijeti regularni izraz u neku ćeliju , recimo A5, i umetnite formulu izravno u ćeliju pomoću dijaloškog okvira Insert Function , gdje je AblebitsRegexRemove kategoriziran pod AblebitsUDFs .
Kako je ova funkcija posebno dizajnirana za uklanjanje nizova, zahtijeva samo dva argumenta - ulazni niz i regularni izraz:
=AblebitsRegexRemove(A5, $A$2)
Tako se uklanjaju razmaci u Excel koji koristi regularne izraze. Zahvaljujem vam na čitanju i radujem se što ćemo vas vidjeti na našem blogu sljedeći tjedan!
Dostupna preuzimanja
Uklonite razmake s regularnim izrazom - primjeri (.xlsm datoteka)
Ultimate Suite - probna verzija (.exe datoteka)
riječi ali i na početku i na kraju niza, što nije dobro. Da biste se riješili razmaka na početku i na kraju, ugniježdite gornju formulu u drugu funkciju RegExpReplace koja uklanja razmake s početka i kraja: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex to uklonite razmak na početku i na kraju
Za traženje razmaka na početku ili na kraju retka koristite početna ^ i krajnja sidra $.
Uvodni razmak:
Uzorak : ^[\s]+
Završni razmak:
Uzorak : [\s ]+$
Razmak na početku i zadnji razmak:
Uzorak : ^[\s]+