Fjern mellomrom og tomme linjer i Excel ved å bruke Regex

  • Dele Denne
Michael Brown

Ønsker du å håndtere mellomrom på den mest effektive måten? Bruk regulære uttrykk for å fjerne alle mellomrom i en celle, erstatt flere mellomrom med ett enkelt tegn, trim kun mellomrom mellom tall og mer.

Uansett hvilken inndata du bruker, vil du neppe møte en datasett uten mellomrom. I de fleste tilfeller er mellomrom bra – du bruker det til å visuelt skille forskjellige deler av informasjon for å gjøre det lettere å oppfatte. I noen situasjoner kan det imidlertid bli ondt – ekstra mellomrom kan rote til formlene dine og gjøre regnearkene nesten uhåndterlige.

    Hvorfor bruke regulære uttrykk for å trimme mellomrom i Excel?

    Før vi dykker ned i det tøffe med å bruke regulære uttrykk for å fjerne mellomrom i Excel-regneark, vil jeg ta opp spørsmålet som dukker opp i første omgang - hvorfor trenger vi regexes når Excel allerede har TRIM funksjon?

    For å forstå forskjellen, la oss se hva som anses som mellomrom i hvert tilfelle:

    • Den innebygde TRIM-funksjonen kan bare fjerne mellomromstegn som har verdi 32 i 7-bits ASCII-systemet.
    • Regulære uttrykk kan identifisere noen få forskjellige former for mellomrom som mellomrom ( ), tabulator (\t), vognretur (\r) og ny linje (\n). I tillegg er det mellomromstegn (\s) som samsvarer med alle disse typene og er svært nyttig for å rense råinndatadata.

    Vet du nøyaktig hva som skjer bak kulissene, er det mye lettere å finne en løsning, ikke sant?

    Hvordan aktiverer du regulære uttrykk i Excel

    Det er et velkjent faktum at ut-av-boksen Excel ikke støtter regulære uttrykk. For å aktivere dem, må du opprette en tilpasset VBA-funksjon. Heldigvis har vi allerede en, som heter RegExpReplace . Vent, hvorfor "erstatte" mens vi snakker om å fjerne? I Excel-språket er "fjern" bare et annet ord for "erstatt med en tom streng" :)

    For å legge til funksjonen til Excel, kopierer du bare koden fra denne siden, limer den inn i VBA-redigeringsprogrammet , og lagre filen som en makroaktivert arbeidsbok (.xlsm).

    Her er funksjonens syntaks som referanse:

    RegExpReplace(tekst, mønster, erstatning, [forekomstnummer] , [match_case])

    De tre første argumentene er obligatoriske, de to siste er valgfrie.

    Hvor:

    • Tekst - den opprinnelige strengen til søk i.
    • Mønster - regex å søke etter.
    • Erstatning - teksten som skal erstattes med. For å fjerne mellomrom , setter du dette argumentet til enten:
      • tom streng ("") for å trimme absolutt alle mellomrom
      • mellomrom tegn (" ") for å erstatte flere mellomrom med ett enkelt mellomrom
    • Forekomstnummer (valgfritt) – forekomstnummeret. I de fleste tilfeller vil du utelate den for å erstatte alle forekomster(standard).
    • Match_case (valgfritt) - en boolsk verdi som indikerer om det skal samsvare (TRUE) eller ignorere (FALSE) tekst med store og små bokstaver. For mellomrom er det irrelevant og derfor utelatt.

    For mer informasjon, se funksjonen RegExpReplace.

    Hvordan fjerne mellomrom med regulært uttrykk - eksempler

    Med RegExpReplace-funksjonen lagt til i arbeidsboken din, la oss takle ulike scenarier ett om gangen.

    Fjern alle mellomrom ved hjelp av regulært uttrykk

    For å fjerne alle mellomrom i en streng, søker du ganske enkelt etter et mellomromstegn, inkludert et mellomrom, en tabulator, en vognretur og en linjemating, og erstatt dem med en tom streng ("").

    Mønster : \s+

    Erstatning : ""

    Forutsatt at kildestrengen er i A5, er formelen i B5:

    =RegExpReplace(A5, "\s+", "")

    For å gjøre det enklere å administrere mønstrene dine , kan du legge inn regex i en forhåndsdefinert celle og gi den til formelen ved å bruke en absolutt referanse som $A$2, slik at celleadressen forblir uendret når du kopierer formelen nedover kolonnen.

    =RegExpReplace(A5, $A$2, "")

    Fjern mer enn ett mellomrom

    For å fjerne ekstra mellomrom (dvs. mer enn n ett påfølgende mellomrom), bruk det samme regulære uttrykket \s+, men erstatt de funnet samsvarene med et enkelt mellomromstegn.

    Mønster : \s+

    Erstatning : " "

    =RegExpReplace(A5, "\s+", " ")

    Vær oppmerksom på at denne formelen holder ett mellomrom ikke bare mellomunder datasettet, anta at du ønsker å trimme alle innledende/etterfølgende mellomrom og alle unntatt ett mellomrom, og holde flere linjer intakte. For å utføre oppgaven trenger du to forskjellige RegExpReplace-funksjoner.

    Den første funksjonen erstatter flere mellomrom med ett enkelt mellomromstegn.

    =RegExpReplace(A5, " +", " ")

    Den andre striper mellomrom fra begynnelsen og slutten av en linje:

    =RegExpReplace(A5, "^ +| +$", "")

    Bare nest de to funksjonene inn i hverandre:

    =RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")

    Og du får en perfekt resultat:

    Regex for å erstatte flere mellomrom med ett tegn

    I tilfelle du vil fjerne alle mellomrom fra en streng og erstatte hver gruppe av påfølgende mellomrom med et spesifikt tegn, er dette hva du trenger å gjøre:

    Bruk først dette regulære uttrykket for å trimme innledende og etterfølgende mellomrom:

    =RegExpReplace(A8, "^[\s]+|[\s]+$", "")

    Deretter bruker du funksjonen ovenfor til tekst -argumentet til et annet RegExpReplace som erstatter ett eller flere påfølgende mellomrom med tegnet du spesifiserer, f.eks. en bindestrek:

    Mønster : \s+

    Erstatning : -

    Forutsatt at kildestrengen er i A8, formelen tar denne formen:

    =RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")

    Eller du kan legge inn mønstrene og erstatningene i separate celler som vist på skjermbildet:

    Regex for å fjerne tomme linjer

    Her er et spørsmål som brukere som har flere linjer i én celle ofte stiller: "Det er mange tomme linjer i cellene mine. Er det noen måte å få tak ikvitt dem annet enn å gå gjennom hver celle og slette hver linje manuelt?" Svaret: Det er enkelt!

    For å matche tomme linjer som ikke har et eneste tegn fra starten ^ på gjeldende linje og opp til neste linje \n, det regulære uttrykket er:

    Mønster : ^\n

    Hvis dine visuelt tomme linjer inneholder mellomrom eller tabulatorer, bruk dette regulære uttrykket:

    Mønster : ^[\t ]*\n

    Bare erstatt regex med en tom streng ved å bruke denne formelen, og alle tomme linjer vil forsvinne med en gang!

    =RegExpReplace(A5, $A$2, "")

    Fjerne mellomrom med RegEx-verktøy

    Eksemplene ovenfor har vist bare en liten del av fantastiske muligheter gitt av regexes. Dessverre er ikke alle funksjonene til klassiske regulære uttrykk er tilgjengelige i VBA.

    Heldigvis er RegEx-verktøyene som følger med Ultimate Suite fri for disse begrensningene siden de behandles av Microsofts .NET RegEx-motor. Dette lar deg konstruere mer sofistikerte mønstre som støttes ikke av VBA RegExp. Belo w du finner et eksempel på et slikt regulært uttrykk.

    Regex for å fjerne mellomrom mellom tall

    I en alfanumerisk streng, anta at du ønsker å fjerne mellomrom bare mellom tall, så en streng som f.eks. "A 1 2 B" blir "A 12 B".

    For å matche et mellomrom mellom to siffer kan du bruke følgende omvisninger:

    Mønster : (?<=\d)\s+(?=\d)

    For å lage en formelbasertpå regexes ovenfor, her er to enkle trinn å utføre:

    1. I kategorien Ablebits Data , i Text -gruppen, klikker du Regex Verktøy .

    2. I ruten Regex Tools velger du kildedataene, skriver inn ditt regulære uttrykk, velger Fjern alternativet, og trykk Fjern .

      For å få resultatene som formler, ikke verdier, husk å hake i avmerkingsboksen Sett inn som formel .

    Om et øyeblikk vil du se AblebitsRegexRemove -funksjonen satt inn i en ny kolonne til høyre for de opprinnelige dataene.

    Alternativt kan du legge inn regex i en celle , si A5, og sett inn formelen direkte i en celle ved hjelp av dialogboksen Sett inn funksjon , der AblebitsRegexRemove er kategorisert under AblebitsUDFs .

    Siden denne funksjonen er spesielt utviklet for å fjerne strenger, krever den bare to argumenter - inndatastrengen og regex:

    =AblebitsRegexRemove(A5, $A$2)

    Slik fjerner du mellomrom i Excel ved hjelp av regulære uttrykk. Jeg takker for at du leser og ser frem til å se deg på bloggen vår neste uke!

    Tilgjengelige nedlastinger

    Fjern mellomrom med regex - eksempler (.xlsm-fil)

    Ultimate Suite - prøveversjon (.exe-fil)

    ord, men også i begynnelsen og slutten av en streng, noe som ikke er bra. For å bli kvitt innledende og etterfølgende mellomrom, nester du formelen ovenfor inn i en annen RegExpReplace-funksjon som fjerner mellomrom fra begynnelsen og slutten:

    =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")

    Regex til fjern innledende og etterfølgende mellomrom

    For å søke etter mellomrom på begynnelsen eller slutten av en linje, bruk start ^ og slutt $-anker.

    Leading mellomrom:

    Mønster : ^[\s]+

    Trailing mellomrom:

    Mønster : [\s ]+$

    Leading og trailing blanktegn:

    Mønster : ^[\s]+

    Michael Brown er en dedikert teknologientusiast med en lidenskap for å forenkle komplekse prosesser ved hjelp av programvareverktøy. Med mer enn ti års erfaring i teknologibransjen, har han forbedret ferdighetene sine i Microsoft Excel og Outlook, samt Google Sheets og Docs. Michaels blogg er dedikert til å dele sin kunnskap og ekspertise med andre, og gir enkle å følge tips og veiledninger for å forbedre produktivitet og effektivitet. Enten du er en erfaren profesjonell eller nybegynner, tilbyr Michaels blogg verdifull innsikt og praktiske råd for å få mest mulig ut av disse viktige programvareverktøyene.