Innehållsförteckning
Vill du hantera vitrymder på det mest effektiva sättet? Använd reguljära uttryck för att ta bort alla mellanslag i en cell, ersätta flera mellanslag med ett enda tecken, trimma mellanslag endast mellan siffror och mycket mer.
Oavsett vilka indata du använder kommer du knappast att stöta på ett dataset utan mellanslag. I de flesta fall är mellanslag bra - du använder det för att visuellt separera olika delar av informationen för att göra den lättare att uppfatta. I vissa situationer kan det dock bli onda - extra mellanslag kan ställa till det för dina formler och göra dina kalkylblad nästan oöverskådliga.
Varför använda reguljära uttryck för att trimma vitrymder i Excel?
Innan vi dyker in i den nitty-gritty av att använda reguljära uttryck för att ta bort vitrymder i Excel-arbetsblad, Jag skulle vilja ta itu med den fråga som kommer att tänka på i första hand - varför behöver vi regexes när Excel redan har TRIM-funktionen?
För att förstå skillnaden ska vi se vad som anses vara whitespace i båda fallen:
- Den inbyggda TRIM-funktionen kan endast ta bort mellanslagstecken. som har värdet 32 i 7-bitars ASCII-systemet.
- Reguljära uttryck kan identifiera några olika former av vitrymder, t.ex. mellanslag ( ), tabb (\t), vagnretur (\r) och ny rad (\n). tecken för mellanslag (\s) som matchar alla dessa typer och som är till stor hjälp för att rensa råa indata.
När man vet exakt vad som händer bakom kulisserna är det mycket lättare att hitta en lösning, eller hur?
Hur du aktiverar reguljära uttryck i Excel
Det är ett välkänt faktum att Excel inte har stöd för reguljära uttryck. För att aktivera dem måste du skapa en egen VBA-funktion. Som tur är har vi redan en, som heter RegExpReplace . Vänta, varför "ersätta" när vi talar om att ta bort? I Excel är "ta bort" bara ett annat ord för "ersätta med en tom sträng" :)
Om du vill lägga till funktionen i Excel kopierar du bara koden från den här sidan, klistrar in den i VBA-redigeraren och sparar filen som en arbetsbok med makroaktiverad arbetsbok (.xlsm).
Här är funktionens syntax som referens:
RegExpReplace(text, mönster, ersättning, [instance_num], [match_case])De tre första argumenten är obligatoriska, de två sista är valfria.
Var:
- Text - den ursprungliga strängen att söka i.
- Mönster - det regex som ska sökas efter.
- Ersättning - den text som ska ersättas med. Till ta bort mellanslag , skulle du ställa in detta argument till antingen:
- tom sträng ("") för att klippa bort alla mellanslag
- utrymme tecken (" ") för att ersätta flera mellanslag med ett enda mellanslag.
- Instance_num (valfritt) - instansnumret. I de flesta fall utelämnar du det för att ersätta alla instanser (standard).
- Match_case (valfritt) - ett boolskt värde som anger om textbokstäver ska matchas (TRUE) eller ignoreras (FALSE). För vitrymder är det irrelevant och utelämnas därför.
Mer information finns i funktionen RegExpReplace.
Hur man tar bort vitrymder med regex - exempel
När funktionen RegExpReplace har lagts till i arbetsboken kan vi ta oss an olika scenarier ett i taget.
Ta bort alla vitrymder med hjälp av regex
Om du vill ta bort alla mellanslag i en sträng söker du helt enkelt efter alla tecken för vitrymder, inklusive mellanslag, tabb, vagnretur och radmatning, och ersätter dem med en tom sträng ("").
Mönster : \s+
Ersättning : ""
Om vi antar att källsträngen finns i A5 är formeln i B5 följande:
=RegExpReplace(A5, "\s+", "")
För att göra det lättare att hantera dina mönster kan du ange regex i en fördefinierad cell och ange den i formeln med en absolut referens, t.ex. $A$2, så att celladressen förblir oförändrad när du kopierar formeln ner i kolumnen.
=RegExpReplace(A5, $A$2, "")
Ta bort mer än ett vitrymderum
För att ta bort extra blanksteg (dvs. mer än ett på varandra följande mellanslag), använd samma regex \s+ men ersätt de funna träffarna med ett enda mellanslag.
Mönster : \s+
Ersättning : " "
=RegExpReplace(A5, "\s+", " " ")
Observera att den här formeln behåller ett mellanslag inte bara mellan ord utan även i början och slutet av en sträng, vilket inte är bra. För att bli av med inledande och avslutande vitrymder, kan du bädda in ovanstående formel i en annan RegExpReplace-funktion som tar bort mellanslag i början och slutet:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
Regex för att ta bort inledande och avslutande vitrymder
Om du vill söka efter vitrymder i början eller slutet av en rad använder du ankarna start ^ och slut $.
Ledande vitrymder:
Mönster : ^[\s]+
Efterföljande vitrymder:
Mönster : [\s]+$
Ledande och efterföljande vitrymder:
Mönster : ^[\s]+
Oavsett vilken regex du väljer ersätter du träffarna med ingenting.
Ersättning : ""
Om du till exempel vill eliminera alla mellanslag i början och slutet av en sträng i A5 är formeln följande:
=RegExpReplace(A5, "^[\s]+
Som framgår av skärmbilden nedan tar detta bara bort inledande och avslutande vitrymder. Mellanrummen mellan orden förblir intakta, vilket ger en visuellt tilltalande bild för läsarens öga.
Ta bort extra blanksteg men behåll radbrytningar.
När du arbetar med strängar med flera rader kanske du vill bli av med extra mellanslag men behålla radbrytningarna. För att göra detta söker du i stället för vitrymdstecknet \s efter mellanslag [ ] eller mellanslag och tabulatorer [\t ]. Det sistnämnda mönstret är praktiskt när dina källdata importeras från en annan källa, t.ex. en textredigerare.
Antag att du vill trimma alla inledande/slutande mellanslag och alla utom ett mellanrum i nedanstående dataset, men behålla flera rader intakta. För att utföra uppgiften behöver du två olika RegExpReplace-funktioner.
Den första funktionen ersätter flera mellanslag med ett enda mellanslag.
=RegExpReplace(A5, " +", " " ")
Den andra tar bort mellanslag från början och slutet av en rad:
=RegExpReplace(A5, "^ +
Det är bara att bädda in de två funktionerna i varandra:
=RegExpReplace(RegExpReplace(A5, " +", " " "), "^ +
Du får ett perfekt resultat:
Regex för att ersätta flera mellanslag med ett tecken
Om du vill ta bort alla mellanslag från en sträng och ersätta varje grupp av på varandra följande mellanslag med ett visst tecken, kan du göra så här:
Först använder du det här regexet för att trimma ledande och avslutande vitrymder:
=RegExpReplace(A8, "^[\s]+
Servera sedan ovanstående funktion till text argument för en annan RegExpReplace som ersätter ett eller flera på varandra följande blanksteg med det tecken du anger, t.ex. ett bindestreck:
Mönster : \s+
Ersättning : -
Om vi antar att källsträngen står i A8, får formeln följande form:
=RegExpReplace(RegExpReplace(A8, "^[\s]+
Eller så kan du ange mönster och ersättningar i separata celler som i skärmbilden:
Regex för att ta bort tomma rader
Här är en fråga som användare som har flera rader i en cell ofta ställer: "Det finns många tomma rader i mina celler. Finns det något annat sätt att bli av med dem än att gå igenom varje cell och ta bort varje rad manuellt?" Svaret: Det är enkelt!
För att matcha tomma rader som inte har ett enda tecken från början ^ av den aktuella raden fram till nästa rad \n är regexet:
Mönster : ^\n
Om dina visuellt tomma rader innehåller mellanslag eller tabulatorer använder du det här reguljära uttrycket:
Mönster : ^[\t ]*\n
Ersätt bara regex med en tom sträng med hjälp av denna formel, så försvinner alla tomma rader på en gång!
=RegExpReplace(A5, $A$2, "")
Ta bort mellanslag med RegEx-verktyg
Ovanstående exempel visar bara en liten del av de fantastiska möjligheter som ges av reguljära uttryck. Tyvärr är inte alla funktioner i klassiska reguljära uttryck tillgängliga i VBA.
Lyckligtvis är RegEx-verktygen som ingår i vår Ultimate Suite fria från dessa begränsningar eftersom de bearbetas av Microsofts .NET RegEx-motor. Detta gör att du kan konstruera mer sofistikerade mönster som inte stöds av VBA RegExp. Nedan hittar du ett exempel på ett sådant reguljärt uttryck.
Regex för att ta bort mellanslag mellan siffror
I en alfanumerisk sträng antar vi att du vill ta bort mellanslag mellan siffror, så att en sträng som "A 1 2 B" blir "A 12 B".
Om du vill matcha ett vitrymdsutrymme mellan två valfria siffror kan du använda följande alternativ:
Mönster : (?<=\d)\s+(?=\d)
För att skapa en formel baserad på ovanstående regexer finns det två enkla steg att utföra:
- På den Uppgifter om Ablebits på fliken Text grupp, klicka på Regex-verktyg .
- På den Regex-verktyg Välj källdata, skriv in ditt regex, välj den Ta bort och tryck på Ta bort .
Om du vill få resultaten som formler, inte som värden, måste du sätta ett kryss i Infoga som en formel kryssrutan.
Om ett ögonblick ser du den AblebitsRegexRemove funktion som infogas i en ny kolumn till höger om de ursprungliga uppgifterna.
Alternativt kan du skriva in regex i en cell, t.ex. A5, och infoga formeln direkt i en cell med hjälp av Infoga funktion dialogrutan, där AblebitsRegexRemove kategoriseras under AblebitsUDFs .
Eftersom den här funktionen är speciellt utformad för att ta bort strängar krävs endast två argument - inmatningssträngen och regex:
=AblebitsRegexRemove(A5, $A$2)
Så här tar du bort mellanslag i Excel med hjälp av reguljära uttryck. Tack för att du läste och vi ses på vår blogg nästa vecka!
Tillgängliga nedladdningar
Ta bort vitrymder med regex - exempel (.xlsm-fil)
Ultimate Suite - testversion (.exe-fil)