Fjern mellemrum og tomme linjer i Excel ved hjælp af Regex

  • Del Dette
Michael Brown

Vil du håndtere mellemrum på den mest effektive måde? Brug regulære udtryk til at fjerne alle mellemrum i en celle, erstatte flere mellemrum med et enkelt tegn, kun trimme mellemrum mellem tal og meget mere.

Uanset hvilke inputdata du bruger, vil du næppe støde på et datasæt uden mellemrum. I de fleste tilfælde er mellemrum godt - du bruger det til visuelt at adskille forskellige oplysninger for at gøre det lettere at opfatte dem. I nogle situationer kan det dog blive ondt - ekstra mellemrum kan forstyrre dine formler og gøre dine regneark næsten uoverskuelige.

    Hvorfor bruge regulære udtryk til at trimme mellemrum i Excel?

    Før vi dykker ned i de små detaljer om at bruge regulære udtryk til at fjerne mellemrum i Excel-regneark, vil jeg gerne tage fat på det spørgsmål, der først og fremmest falder mig ind - hvorfor har vi brug for regexes, når Excel allerede har TRIM-funktionen?

    For at forstå forskellen skal vi se på, hvad der betragtes som whitespace i hvert tilfælde:

    • Den indbyggede TRIM-funktion kan kun fjerne mellemrums tegn der har værdien 32 i 7-bit ASCII-systemet.
    • Regulære udtryk kan identificere et par forskellige former for whitespace, såsom mellemrum ( ), tabulator (\t), vogn retur (\r) og ny linje (\n). Derudover er der også den mellemrums tegn (\s), der matcher alle disse typer og er yderst nyttig til rensning af rå inputdata.

    Når man ved præcis, hvad der sker bag kulisserne, er det meget nemmere at finde en løsning, ikke sandt?

    Sådan aktiveres regulære udtryk i Excel

    Det er et velkendt faktum, at Excel ikke understøtter regulære udtryk. For at aktivere dem skal du oprette en brugerdefineret VBA-funktion. Heldigvis har vi allerede en, der hedder RegExpReplace . Vent, hvorfor "replace" når vi taler om at fjerne? I Excel er "remove" bare et andet ord for "erstatte med en tom streng" :)

    For at tilføje funktionen til din Excel skal du blot kopiere koden fra denne side, indsætte den i VBA-editoren og gemme filen som en makroaktiveret arbejdsbog (.xlsm).

    Her er funktionens syntaks til orientering:

    RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

    De tre første argumenter er obligatoriske, de to sidste er valgfrie.

    Hvor:

    • Tekst - den oprindelige streng, der skal søges i.
    • Mønster - den regex, der skal søges efter.
    • Udskiftning - den tekst, der skal erstattes med. Til fjerne mellemrum , skal du indstille dette argument til enten:
      • tom streng ("") for at beskære alle mellemrum
      • rum karakter (" ") for at erstatte flere mellemrum med et enkelt mellemrum
    • Instance_num (valgfrit) - instansnummeret. I de fleste tilfælde udelades det for at erstatte alle instanser (standard).
    • Match_case (valgfrit) - en boolsk værdi, der angiver, om der skal matches (TRUE) eller ignoreres (FALSE) store og små bogstaver i teksten. For whitespace er den irrelevant og udelades derfor.

    Du kan finde flere oplysninger under RegExpReplace-funktionen.

    Sådan fjerner du mellemrum med regex - eksempler

    Når funktionen RegExpReplace er tilføjet til din projektmappe, kan vi nu tage fat på forskellige scenarier et ad gangen.

    Fjern alle mellemrum ved hjælp af regex

    Hvis du vil fjerne alle mellemrum i en streng, skal du blot søge efter ethvert whitespace-tegn, herunder et mellemrum, en tabulator, en vogn retur og en linjefod, og erstatte dem med en tom streng ("").

    Mønster : \s+

    Udskiftning : ""

    Hvis vi antager, at kilde-strengen er i A5, er formlen i B5:

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

    For at gøre det nemmere at administrere dine mønstre kan du indtaste regexen i en foruddefineret celle og angive den i formlen ved hjælp af en absolut reference som f.eks. $A$2, så celleadressen forbliver uændret, når du kopierer formlen ned i kolonnen.

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

    Fjern mere end ét mellemrum

    For at fjerne ekstra mellemrum (dvs. flere end ét på hinanden følgende mellemrum), skal du bruge den samme regex \s+, men erstatte de fundne match med et enkelt mellemrum.

    Mønster : \s+

    Udskiftning : " "

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

    Vær opmærksom på, at denne formel ikke kun beholder et mellemrum mellem ord, men også i begyndelsen og slutningen af en streng, hvilket ikke er godt. Hvis du vil slippe af med ledende og afsluttende mellemrum, skal du integrere ovenstående formel i en anden RegExpReplace-funktion, der fjerner mellemrum fra begyndelsen og slutningen:

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

    Regex til at fjerne ledende og afsluttende mellemrum

    Hvis du vil søge efter mellemrum i begyndelsen eller slutningen af en linje, skal du bruge start ^ og slut $-ankrene.

    Ledende mellemrum:

    Mønster : ^[\s]+

    Efterfølgende mellemrum:

    Mønster : [\s]+$

    Ledende og efterfølger mellemrum:

    Mønster : ^[\s]+

    Uanset hvilken regex du vælger, skal du erstatte de tilsvarende resultater med ingenting.

    Udskiftning : ""

    For at fjerne alle mellemrum i begyndelsen og slutningen af en streng i A5 er formlen f.eks:

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

    Som vist i skærmbilledet nedenfor fjerner dette kun forreste og bageste mellemrum. Mellemrum mellem ord forbliver intakte og skaber et visuelt behageligt billede for læserens øje.

    Fjern ekstra mellemrum, men behold linjeskift

    Når du arbejder med strenge med flere linjer, kan du ønske at fjerne ekstra mellemrum, men bevare linjeskift. For at få dette gjort, skal du i stedet for whitespace-tegnet \s søge efter mellemrum [ ] eller mellemrum og tabulator [\t ]. Sidstnævnte mønster er praktisk, når dine kildedata importeres fra en anden kilde, f.eks. en teksteditor.

    Antag, at du i nedenstående datasæt ønsker at beskære alle indledende/afsluttende mellemrum og alle mellemrum undtagen et mellemrum, idet du beholder flere linjer intakte. For at udføre opgaven har du brug for to forskellige RegExpReplace-funktioner.

    Den første funktion erstatter flere mellemrum med et enkelt mellemrum.

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

    Den anden fjerner mellemrum fra begyndelsen og slutningen af en linje:

    =RegExpReplace(A5, "^ +

    De to funktioner skal blot være indlejret i hinanden:

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

    Og du får et perfekt resultat:

    Regex til at erstatte flere mellemrum med ét tegn

    Hvis du ønsker at fjerne alle mellemrum fra en streng og erstatte hver gruppe af på hinanden følgende mellemrum med et bestemt tegn, skal du gøre dette:

    Brug først denne regex til at trimme ledende og afsluttende mellemrum:

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

    Derefter skal du betjene ovenstående funktion til den tekst argument for et andet RegExpReplace, der erstatter et eller flere på hinanden følgende mellemrum med det tegn, du angiver, f.eks. en bindestreg:

    Mønster : \s+

    Udskiftning : -

    Hvis vi antager, at kildestrengen er i A8, får formlen denne form:

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

    Du kan også indtaste mønstre og erstatninger i separate celler, som vist på skærmbilledet:

    Regex til at fjerne tomme linjer

    Her er et spørgsmål, som brugere, der har flere linjer i en celle, ofte stiller: "Der er mange tomme linjer i mine celler. Er der nogen anden måde at fjerne dem på end at gå igennem hver celle og slette hver linje manuelt?" Svaret: Det er nemt!

    For at matche tomme linjer, der ikke har et enkelt tegn fra starten ^ af den aktuelle linje til den næste linje \n, er regex'en:

    Mønster : ^\n

    Hvis dine visuelt tomme linjer indeholder mellemrum eller tabulatorer, skal du bruge dette regulære udtryk:

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

    Du skal blot erstatte regex'en med en tom streng ved hjælp af denne formel, så forsvinder alle tomme linjer med det samme!

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

    Fjernelse af mellemrum med RegEx-værktøjer

    Ovenstående eksempler har kun vist en lille del af de fantastiske muligheder, som regexes giver. Desværre er det ikke alle funktioner i klassiske regulære udtryk, der er tilgængelige i VBA.

    Heldigvis er RegEx-værktøjerne, der er inkluderet i vores Ultimate Suite, fri for disse begrænsninger, da de behandles af Microsofts .NET RegEx-motor. Dette giver dig mulighed for at konstruere mere sofistikerede mønstre, som ikke understøttes af VBA RegExp. Nedenfor finder du et eksempel på et sådant regulært udtryk.

    Regex til at fjerne mellemrum mellem tal

    Antag, at du i en alfanumerisk streng kun ønsker at fjerne mellemrum mellem tal, så en streng som "A 1 2 B" bliver til "A 12 B".

    Hvis du vil matche et mellemrum mellem to vilkårlige cifre, kan du bruge følgende omgåsmetoder:

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

    Du kan oprette en formel baseret på ovenstående regexes ved at udføre to nemme trin:

    1. På den Ablebits Data under fanen, i fanen Tekst gruppe, klik på Regex-værktøjer .

    2. På den Regex-værktøjer ruden, vælg kildedata, indtast din regex, vælg den Fjern indstilling, og tryk på Fjern .

      Hvis du vil have resultaterne som formler og ikke som værdier, skal du huske at sætte et kryds i feltet Indsæt som en formel afkrydsningsfeltet.

    Om et øjeblik vil du se den AblebitsRegexRemove funktionen indsættes i en ny kolonne til højre for de oprindelige data.

    Alternativt kan du indtaste regex'en i en celle, f.eks. A5, og indsætte formlen direkte i en celle ved hjælp af Indsæt funktion dialogboks, hvor AblebitsRegexRemove er kategoriseret under AblebitsUDF'er .

    Da denne funktion er specielt designet til at fjerne strenge, kræver den kun to argumenter - inputstrengen og regex:

    =AblebitsRegexRemove(A5, $A$2)

    Sådan fjerner du mellemrum i Excel ved hjælp af regulære udtryk. Jeg takker for din læsning og glæder mig til at se dig på vores blog i næste uge!

    Tilgængelige downloads

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

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

    Michael Brown er en dedikeret teknologientusiast med en passion for at forenkle komplekse processer ved hjælp af softwareværktøjer. Med mere end ti års erfaring i teknologibranchen har han finpudset sine færdigheder i Microsoft Excel og Outlook samt Google Sheets og Docs. Michaels blog er dedikeret til at dele sin viden og ekspertise med andre og giver nemme at følge tips og vejledninger til at forbedre produktiviteten og effektiviteten. Uanset om du er en erfaren professionel eller nybegynder, tilbyder Michaels blog værdifuld indsigt og praktiske råd til at få mest muligt ud af disse vigtige softwareværktøjer.