Sadržaj
Želite da rukujete prazninama na najefikasniji način? Koristite regularne izraze da biste uklonili sve razmake u ćeliji, zamijenili više razmaka jednim znakom, smanjili samo razmake između brojeva i još mnogo toga.
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 dijelova informacija kako biste ih lakše percipirali. U nekim situacijama, međutim, to može postati zao - dodatni razmaci mogu pokvariti vaše formule i učiniti vaše radne listove gotovo neupravljivim.
Zašto koristiti regularni izraz za smanjenje razmaka u Excelu?
Prije nego što uronimo u srž upotrebe regularnih izraza za uklanjanje razmaka u Excel radnim listovima, želio bih se pozabaviti pitanjem koje nam prvo pada na pamet - zašto su nam potrebni regularni izrazi kada Excel već ima TRIM funkcija?
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 sistemu.
- Regularni izrazi mogu identificirati nekoliko različitih oblika razmaka, kao što su razmak ( ), tab (\t), povratak na nosač (\r) i novi linija (\n). Dodatno, postoji razmak (\s) koji odgovara svim ovim tipovima i koji je izuzetno koristan za čišćenje sirovog unosapodaci.
Znajući tačno šta se dešava iza scene, mnogo je lakše pronaći rešenje, zar ne?
Kako omogućiti regularne izraze u Excelu
Dobro je poznata činjenica da gotovi Excel ne podržava regularne izraze. Da biste ih omogućili, morate kreirati prilagođenu VBA funkciju. Srećom, već imamo jedan, pod nazivom RegExpReplace . Čekaj, zašto "zamijeniti" dok govorimo o uklanjanju? U Excel jeziku, "ukloni" je samo još jedna riječ za "zamijeni praznim nizom" :)
Da dodate funkciju u svoj Excel, samo kopirajte njen kod sa ove stranice, zalijepite je u VBA editor , i spremite svoju datoteku kao radnu knjigu s omogućenom makronaredbom (.xlsm).
Ovo je sintaksa funkcije za vašu referencu:
RegExpReplace(tekst, uzorak, zamjena, [broj_instance] , [match_case])Prva tri argumenta su obavezna, posljednja dva su opciona.
Gdje:
- Tekst - originalni niz za traži u.
- Uzorak - regularni izraz za traženje.
- Zamjena - tekst za zamjenu. Da uklonite razmake , ovaj argument biste postavili na:
- prazan string ("") da biste skratili apsolutno sve razmake
- razmak znak (" ") za zamjenu više razmaka s jednim znakom razmaka
- Broj_instance (opciono) - broj instance. U većini slučajeva ćete ga izostaviti da biste zamijenili sve instance(podrazumevano).
- Match_case (opciono) - Boolean vrednost koja pokazuje da li se podudara (TRUE) ili ignorisati (FALSE) velika i mala slova teksta. Za razmak je irelevantan i stoga je izostavljen.
Za više informacija pogledajte funkciju RegExpReplace.
Kako ukloniti razmak pomoću regularnog izraza - primjeri
Sa RegExpReplace funkcija dodana u vašu radnu svesku, hajde da se pozabavimo različitim scenarijima jedan po jedan.
Uklonite sve razmake koristeći regex
Da biste uklonili sve razmake u nizu, jednostavno tražite bilo koji znak razmaka, uključujući razmak, tabulator, povratak na red i prijelaz na red i zamijenite ih praznim nizom ("").
Uzorak : \s+
Zamjena : ""
Pod pretpostavkom da je izvorni niz u A5, formula u B5 je:
=RegExpReplace(A5, "\s+", "")
Da bi se olakšalo upravljanje vašim obrascima , možete unijeti regex u unaprijed definiranu ćeliju i dostaviti ga formuli koristeći apsolutnu referencu kao što je $A$2, tako da će adresa ćelije ostati nepromijenjena kada kopirate formulu niz kolonu.
=RegExpReplace(A5, $A$2, "")
Uklonite više od jednog razmaka
Da biste uklonili dodatni razmak (tj. više od n jedan uzastopni razmak), koristite isti regex \s+ ali zamijenite pronađena podudaranja s jednim znakom za razmak.
Uzorak : \s+
Zamjena : " "
=RegExpReplace(A5, "\s+", " ")
Obratite pažnju da ova formula zadržava jedan razmak ne samo izmeđuispod skupa podataka, pretpostavimo da želite smanjiti sve početne/završne razmake i sve osim jednog između razmaka, zadržavajući više redova netaknutim. Da ispunite zadatak, trebat će vam dvije različite funkcije RegExpReplace.
Prva funkcija zamjenjuje više razmaka jednim znakom za razmak.
=RegExpReplace(A5, " +", " ")
Druga uklanja razmake od početka i kraja reda:
=RegExpReplace(A5, "^ +| +$", "")
Samo ugnijezdite 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 sa određenim karakterom, ovo je ono što trebate učiniti:
Prvo, koristite ovaj regex da skrate početne i zadnje razmake:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
Zatim poslužite gornju funkciju u argument text drugog RegExpReplace-a koji zamjenjuje jedan ili više uzastopnih razmaka sa karakterom koji navedete, npr. crtica:
Obrazac : \s+
Zamjena : -
Pod pretpostavkom da je izvorni niz u A8, formula poprima ovaj oblik:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
Ili možete unijeti obrasce i zamjene u zasebne ćelije kao što je prikazano na snimku ekrana:
Regex za uklanjanje praznih redova
Evo pitanja koje korisnici koji imaju više redaka u jednoj ćeliji često postavljaju: "U mojim ćelijama ima puno praznih redova. Postoji li neki način da dobijemosloboditi ih se osim prolaska kroz svaku ćeliju i ručnog brisanja svake linije?" Odgovor: To je lako!
Upariti prazne redove koji nemaju nijedan znak od početka ^ tekućeg reda do sljedeći red \n, regularni izraz je:
Obrazac : ^\n
Ako vaši vizualno prazni redovi sadrže razmake ili tabulatore, koristite ovaj regularni izraz:
Uzorak : ^[\t ]*\n
Samo zamijenite regex praznim nizom koristeći ovu formulu i svi prazni redovi će nestati odjednom!
=RegExpReplace(A5, $A$2, "")
Uklanjanje razmaka pomoću RegEx alata
Gore navedeni primjeri su pokazali samo mali dio prekrasnih mogućnosti koje pružaju regeksi. Nažalost, nisu svi karakteristike klasičnih regularnih izraza dostupne su u VBA.
Srećom, RegEx alati uključeni u naš Ultimate Suite nemaju ovih ograničenja jer ih obrađuje Microsoftov .NET RegEx mehanizam. Ovo vam omogućava da konstruišete sofisticiranije obrasce koji nisu podržani od strane VBA RegExp. Belo w naći ćete primjer takvog regularnog izraza.
Regex za uklanjanje razmaka između brojeva
U alfanumeričkom nizu, pretpostavimo da želite ukloniti razmake samo između brojeva, tako da string kao što je "A 1 2 B" postaje "A 12 B".
Da biste uparili razmak između bilo koje dvije cifre, možete koristiti sljedeće preglede:
Obrazac : (?<=\d)\s+(?=\d)
Za kreiranje formule zasnovanena gornjim regularnim izrazima, evo dva jednostavna koraka za izvođenje:
- Na kartici Ablebits Data , u grupi Text , kliknite na Regex Alati .
- U oknu Regex Tools odaberite izvorne podatke, unesite svoj regularni izraz, odaberite Ukloni opciju i pritisnite Ukloni .
Da biste dobili rezultate kao formule, a ne vrijednosti, ne zaboravite staviti kvačicu u potvrdni okvir Umetni kao formulu .
Za trenutak ćete vidjeti funkciju AblebitsRegexRemove umetnutu u novu kolonu desno od originalnih podataka.
Alternativno, možete unijeti regex u neku ćeliju , recite A5 i umetnite formulu direktno 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 regex:
=AblebitsRegexRemove(A5, $A$2)
Tako se uklanjaju razmaci u Excel koristeći regularne izraze. Zahvaljujem vam na čitanju i radujem se što ću vas vidjeti na našem blogu sljedeće sedmice!
Dostupna preuzimanja
Uklonite razmak pomoću regularnog izraza - primjeri (.xlsm fajl)
Ultimate Suite - probna verzija (.exe fajl)
riječi, ali i na početku i na kraju niza, što nije dobro. Da biste se riješili vodećih i završnih razmaka, ugniježite gornju formulu u drugu funkciju RegExpReplace koja uklanja razmake od početka i kraja: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex u uklonite vodeći i završni razmak
Da biste tražili razmak na početku ili kraju reda, koristite sidra za početak ^ i kraj $.
Vodeći razmak:
Obrazac : ^[\s]+
Završni razmak:
Obrazac : [\s ]+$
Vodeći i završni razmak:
Obrazac : ^[\s]+