INHOUDSOPGAWE
Wil jy witspasies op die mees effektiewe manier hanteer? Gebruik gereelde uitdrukkings om alle spasies in 'n sel te verwyder, vervang veelvuldige spasies met 'n enkele karakter, snoei slegs spasies tussen getalle, en meer.
Watter invoerdata jy ook al gebruik, jy sal skaars 'n teëkom datastel sonder spasies. In die meeste gevalle is witspasie goed - jy gebruik dit om verskillende stukke inligting visueel te skei om dit makliker te maak om waar te neem. In sommige situasies kan dit egter sleg word - ekstra spasies kan jou formules deurmekaar maak en jou werkblaaie byna onhanteerbaar maak.
Hoekom gereelde uitdrukking gebruik om witspasies in Excel te snoei?
Voordat ons ingaan op die netjiese van die gebruik van gereelde uitdrukkings om witspasies in Excel-werkblaaie te verwyder, wil ek graag die vraag aanspreek wat in die eerste plek by my opkom - hoekom het ons regexes nodig as Excel reeds die TRIM het funksie?
Om die verskil te verstaan, kom ons kyk wat in elke geval as witspasie beskou word:
- Die ingeboude TRIM-funksie kan net die spasiekarakter stroop wat waarde 32 in die 7-bis ASCII-stelsel het.
- Gereelde uitdrukkings kan 'n paar verskillende vorme van witspasie identifiseer, soos die spasie ( ), tab (\t), koetsretur (\r) en nuwe lyn (\n). Daarbenewens is daar die witspasie-karakter (\s) wat by al hierdie tipes pas en uiters nuttig is vir die skoonmaak van rou invoerdata.
Om presies te weet wat agter die skerms gebeur, is dit baie makliker om 'n oplossing uit te werk, reg?
Hoe om gereelde uitdrukkings in Excel te aktiveer
Dit is 'n bekende feit dat uit-die-boks Excel nie gereelde uitdrukkings ondersteun nie. Om hulle te aktiveer, moet jy 'n pasgemaakte VBA-funksie skep. Gelukkig het ons reeds een, genaamd RegExpReplace . Wag, hoekom "vervang" terwyl ons praat oor verwydering? In die Excel-taal is "verwyder" net nog 'n woord vir "vervang met 'n leë string" :)
Om die funksie by jou Excel te voeg, kopieer net sy kode vanaf hierdie bladsy, plak dit in die VBA-redigeerder , en stoor jou lêer as 'n makro-geaktiveerde werkboek (.xlsm).
Hier is die funksie se sintaksis vir jou verwysing:
RegExpReplace(teks, patroon, vervanging, [instance_num] , [match_case])Die eerste drie argumente word vereis, die laaste twee is opsioneel.
Waar:
- Teks - die oorspronklike string na soek in.
- Patroon - die regeks om na te soek.
- Vervanging - die teks om mee te vervang. Om te verwyder witspasies , stel jy hierdie argument op óf:
- leë string ("") om absoluut alle spasies af te sny
- spasie karakter (" ") om veelvuldige spasies met 'n enkele spasiekarakter te vervang
- Instance_num (opsioneel) - die instansienommer. In die meeste gevalle sal jy dit weglaat om alle gevalle te vervang(verstek).
- Match_case (opsioneel) - 'n Boole-waarde wat aandui of dit ooreenstem met (WAAR) of ignoreer (ONWAAR) tekskas. Vir witspasie is dit irrelevant en daarom weggelaat.
Vir meer inligting, sien asseblief RegExpReplace-funksie.
Hoe om witspasie met regex te verwyder - voorbeelde
Met die RegExpReplace-funksie by jou werkboek gevoeg, kom ons pak verskillende scenario's een op 'n slag aan.
Verwyder alle witspasies deur gebruik te maak van regex
Om alle spasies in 'n string te verwyder, soek jy bloot vir enige witspasiekarakter, insluitend 'n spasie, 'n oortjie, 'n karretoer en 'n lyntoevoer, en vervang dit met 'n leë string ("").
Patroon : \s+
Vervanging : ""
As die bronstring in A5 is, is die formule in B5:
=RegExpReplace(A5, "\s+", "")
Om dit makliker te maak om jou patrone te bestuur , kan jy die regex in 'n voorafbepaalde sel invoer en dit aan die formule verskaf deur 'n absolute verwysing soos $A$2 te gebruik, sodat die seladres onveranderd sal bly wanneer die formule in die kolom af gekopieer word.
=RegExpReplace(A5, $A$2, "")
Verwyder meer as een witspasie
Om ekstra witspasie te verwyder (d.w.s. meer as n een opeenvolgende spasies), gebruik dieselfde regex \s+ maar vervang die gevind passings met 'n enkele spasie karakter.
Patroon : \s+
Vervanging : " "
=RegExpReplace(A5, "\s+", " ")
Let asseblief daarop dat hierdie formule een spasiekarakter hou nie net tussenonder die datastel, veronderstel jy wil alle voorste/volgende spasies afsny en almal behalwe een tussen-in spasies, en hou veelvuldige lyne ongeskonde. Om die taak te vervul, het jy twee verskillende RegExpReplace-funksies nodig.
Die eerste funksie vervang veelvuldige spasies met 'n enkele spasiekarakter.
=RegExpReplace(A5, " +", " ")
Die ander een stroop spasies vanaf die begin en einde van 'n reël:
=RegExpReplace(A5, "^ +| +$", "")
Neste net die twee funksies in mekaar:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
En jy sal 'n perfekte resultaat:
Regex om veelvuldige spasies met een karakter te vervang
In die geval dat jy alle spasies van 'n string wil verwyder en elke groep opeenvolgende spasies wil vervang met 'n spesifieke karakter, dit is wat jy moet doen:
Gebruik eers hierdie regeks om voor- en agterste witspasies af te sny:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
Dan dan die bogenoemde funksie na die teks -argument van 'n ander RegExpReplace wat een of meer opeenvolgende witspasies vervang met die karakter wat jy spesifiseer, bv. 'n koppelteken:
Patroon : \s+
Vervanging : -
As die bronstring in A8 is, is die formule neem hierdie vorm aan:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
Of jy kan die patrone en vervangings in aparte selle invoer soos in die skermkiekie getoon:
Regex om leë reëls te verwyder
Hier is 'n vraag wat gebruikers wat veelvuldige reëls in een sel het gereeld vra: "Daar is baie leë reëls in my selle. Is daar enige manier om te kryontslae te raak van hulle anders as om deur elke sel te gaan en elke reël met die hand uit te vee?" Die antwoord: Dit is maklik!
Om leë reëls te pas wat nie 'n enkele karakter het vanaf die begin ^ van die huidige reël tot by die volgende reël \n, die regeks is:
Patroon : ^\n
As jou visueel leë lyne spasies of oortjies bevat, gebruik hierdie gewone uitdrukking:
Patroon : ^[\t ]*\n
Vervang net die regeks met 'n leë string deur hierdie formule te gebruik, en alle leë reëls sal gelyktydig weg wees!
=RegExpReplace(A5, $A$2, "")
Verwyder witspasies met RegEx-nutsgoed
Bogenoemde voorbeelde het net 'n klein gedeelte van wonderlike moontlikhede gedemonstreer wat deur regekse verskaf word. Ongelukkig is nie almal kenmerke van klassieke gereelde uitdrukkings is beskikbaar in VBA.
Gelukkig is die RegEx-nutsgoed wat by ons Ultimate Suite ingesluit is vry van hierdie beperkings aangesien dit deur Microsoft se .NET RegEx-enjin verwerk word. Dit laat jou meer gesofistikeerde patrone bou wat word nie deur VBA RegExp. Belo ondersteun nie w jy sal 'n voorbeeld van so 'n gereelde uitdrukking vind.
Regex om spasie tussen getalle te verwyder
In 'n alfanumeriese string, veronderstel jy wil net spasies tussen getalle verwyder, dus 'n string soos "A 1 2 B" word "A 12 B".
Om 'n witspasie tussen enige twee syfers te pas, kan jy die volgende rondkyk gebruik:
Patroon : (?<=\d)\s+(?=\d)
Om 'n formule gebaseer te skepop die bogenoemde regexes, hier is twee maklike stappe om uit te voer:
- Op die Ablebits Data -oortjie, in die Teks -groep, klik Regex Tools .
- Op die Regex Tools -paneel, kies die brondata, voer jou regex in, kies die Verwyder opsie, en druk Verwyder .
Om die resultate as formules te kry, nie waardes nie, onthou om 'n regmerkie in die Voeg in as 'n formule in -merkblokkie te plaas.
In 'n oomblik sal jy die AblebitsRegexRemove -funksie sien in 'n nuwe kolom regs van die oorspronklike data ingevoeg.
Alternatiewelik kan jy die regex in een of ander sel invoer , sê A5, en voeg die formule direk in 'n sel in deur die Voeg funksie in dialoogkassie in, waar AblebitsRegexRemove onder AblebitsUDFs gekategoriseer is.
Aangesien hierdie funksie spesiaal ontwerp is om stringe te verwyder, benodig dit slegs twee argumente - die invoerstring en regex:
=AblebitsRegexRemove(A5, $A$2)
Dis hoe om spasies in te verwyder Excel met behulp van gereelde uitdrukkings. Ek bedank jou vir die lees en sien uit daarna om jou volgende week op ons blog te sien!
Beskikbare aflaaie
Verwyder witspasie met regex - voorbeelde (.xlsm-lêer)
Ultimate Suite - proefweergawe (.exe-lêer)
woorde maar ook aan die begin en einde van 'n string, wat nie goed is nie. Om ontslae te raak van die voorste en agterste witspasie, nes die bogenoemde formule in 'n ander RegExpReplace-funksie wat spasies van die begin en einde stroop: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex na verwyder voorste en agterste witspasie
Om vir witspasie aan die begin of einde van 'n reël te soek, gebruik die begin ^ en einde $ ankers.
Leading witspasie:
Patroon : ^[\s]+
Trailing witspasie:
Patroon : [\s ]+$
Leading en trailing witspasie:
Patroon : ^[\s]+