Verwijder spaties en lege regels in Excel met Regex

  • Deel Dit
Michael Brown

Wilt u op de meest effectieve manier omgaan met spaties? Gebruik reguliere expressies om alle spaties in een cel te verwijderen, meerdere spaties te vervangen door een enkel teken, spaties tussen alleen getallen te trimmen, en meer.

Welke invoergegevens u ook gebruikt, u zult nauwelijks een dataset tegenkomen zonder spaties. In de meeste gevallen zijn spaties goed - u gebruikt ze om verschillende stukken informatie visueel te scheiden om ze gemakkelijker te kunnen waarnemen. In sommige situaties kunnen ze echter kwaadaardig worden - extra spaties kunnen uw formules in de war brengen en uw werkbladen bijna onhandelbaar maken.

    Waarom een reguliere expressie gebruiken om spaties in Excel te trimmen?

    Voordat we ons verdiepen in het gebruik van reguliere expressies om spaties in Excel-werkbladen te verwijderen, wil ik eerst ingaan op de vraag die bij mij opkomt: waarom hebben we regexen nodig als Excel al de TRIM-functie heeft?

    Om het verschil te begrijpen, kijken we wat in beide gevallen als witruimte wordt beschouwd:

    • De ingebouwde TRIM-functie kan alleen de spatie karakter die waarde 32 heeft in het 7-bits ASCII-systeem.
    • Reguliere expressies kunnen een aantal verschillende vormen van witruimte identificeren, zoals de spatie ( ), tab (\t), carriage return (\r), en nieuwe regel (\n). Daarnaast is er de spatie (die met al deze soorten overeenkomt en uiterst nuttig is voor het opschonen van ruwe invoergegevens.

    Als je precies weet wat er achter de schermen gebeurt, is het een stuk makkelijker om een oplossing uit te werken, toch?

    Hoe reguliere uitdrukkingen in te schakelen in Excel

    Het is een bekend feit dat out-of-the-box Excel geen reguliere uitdrukkingen ondersteunt. Om ze in te schakelen, moet je een aangepaste VBA-functie maken. Gelukkig hebben we er al een, genaamd RegExpReplace Wacht, waarom "vervangen" als we het over verwijderen hebben? In de Excel-taal is "verwijderen" gewoon een ander woord voor "vervangen door een lege string" :)

    Om de functie aan uw Excel toe te voegen, kopieert u de code van deze pagina, plakt u deze in de VBA-editor en slaat u uw bestand op als een werkmap met macro's (.xlsm).

    Hier is de syntaxis van de functie ter referentie:

    RegExpReplace(tekst, patroon, vervanging, [instance_num], [match_case])

    De eerste drie argumenten zijn verplicht, de laatste twee zijn optioneel.

    Waar:

    • Tekst - de oorspronkelijke string om in te zoeken.
    • Patroon - de regex om naar te zoeken.
    • Vervanging - de tekst om door te vervangen. Naar verwijderen witruimtes stel je dit argument in op:
      • lege tekenreeks ("") om alle spaties weg te snijden
      • ruimte karakter (" ") om meerdere spaties te vervangen door een enkele spatie
    • Instance_num (optioneel) - het nummer van de instantie. In de meeste gevallen zul je dit weglaten om alle instanties te vervangen (standaard).
    • Geval (facultatief) - een Booleaanse waarde die aangeeft of de tekst moet overeenstemmen (TRUE) of worden genegeerd (FALSE). Voor spaties is dit irrelevant en daarom weggelaten.

    Zie voor meer informatie de functie RegExpReplace.

    Hoe spaties verwijderen met regex - voorbeelden

    Nu de functie RegExpReplace aan uw werkmap is toegevoegd, gaan we verschillende scenario's één voor één aanpakken.

    Alle spaties verwijderen met regex

    Om alle spaties in een tekenreeks te verwijderen, zoekt u gewoon naar elk witruimte-teken, inclusief een spatie, een tab, een carriage return en een line feed, en vervangt u ze door een lege tekenreeks ("").

    Patroon : \s+

    Vervanging : ""

    Ervan uitgaande dat de bronstring in A5 staat, is de formule in B5:

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

    Om uw patronen gemakkelijker te beheren, kunt u de regex invoeren in een vooraf gedefinieerde cel en aan de formule toevoegen met een absolute verwijzing zoals $A$2, zodat het celadres ongewijzigd blijft wanneer u de formule naar beneden in de kolom kopieert.

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

    Meer dan één spatie verwijderen

    Om te verwijderen extra witruimte (d.w.z. meer dan één opeenvolgende spatie), gebruik dan dezelfde regex, maar vervang de gevonden overeenkomsten door een enkele spatie.

    Patroon : \s+

    Vervanging : " "

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

    Let erop dat deze formule niet alleen tussen woorden, maar ook aan het begin en einde van een tekenreeks een spatie laat staan, wat niet goed is. Om voorloop- en volgspaties te verwijderen, nestelt u de bovenstaande formule in een andere RegExpReplace-functie die spaties aan het begin en einde weglaat:

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

    Regex om voorloop- en sleepspaties te verwijderen

    Om te zoeken naar spaties aan het begin of einde van een regel, gebruik je de start ^ en eind $ ankers.

    Toonaangevend witruimte:

    Patroon : ^[\s]+

    Trailing witruimte:

    Patroon : [\s]+$

    Toonaangevend en volgend witruimte:

    Patroon : ^[\s]+

    Welke regex u ook kiest, vervang de overeenkomsten door niets.

    Vervanging : ""

    Om bijvoorbeeld alle spaties aan het begin en het einde van een tekenreeks in A5 te elimineren, is de formule:

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

    Zoals in de onderstaande schermafbeelding te zien is, worden alleen de voorloop- en sleepspaties verwijderd. De spaties tussen de woorden blijven intact, waardoor het oog van de lezer een fraai beeld krijgt.

    Verwijder extra witruimte maar behoud regeleinden

    Wanneer u met meerregelige strings werkt, kan het zijn dat u extra spaties wilt weglaten, maar regelafbrekingen wilt behouden. Om dit te doen, zoekt u in plaats van het witruimteteken spaties [ ] of spaties en tabs [\t ]. Dit laatste patroon is handig wanneer uw brongegevens zijn geïmporteerd uit een andere bron, bijvoorbeeld een tekstverwerker.

    Stel dat u in de onderstaande dataset alle voorloop- en eindspaties en alle spaties daartussen, op één na, wilt wegknippen en daarbij meerdere regels intact wilt laten. Om die taak te volbrengen, hebt u twee verschillende RegExpReplace-functies nodig.

    De eerste functie vervangt meerdere spaties door een enkele spatie.

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

    De andere stript spaties van het begin en einde van een regel:

    =RegExpReplace(A5, "^ +".

    Gewoon de twee functies in elkaar schuiven:

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

    En je krijgt een perfect resultaat:

    Regex om meerdere spaties door één karakter te vervangen

    Als u alle spaties uit een tekenreeks wilt verwijderen en elke groep opeenvolgende spaties wilt vervangen door een specifiek teken, is dit wat u moet doen:

    Gebruik eerst deze regex om voorloop- en sleepspaties weg te werken:

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

    Dien dan de bovenstaande functie toe aan de tekst argument van een andere RegExpReplace die één of meer opeenvolgende spaties vervangt door het teken dat u opgeeft, bijvoorbeeld een koppelteken:

    Patroon : \s+

    Vervanging : -

    Ervan uitgaande dat de bronstring in A8 staat, krijgt de formule deze vorm:

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

    Of u kunt de patronen en vervangingen in afzonderlijke cellen invoeren, zoals in de schermafbeelding:

    Regex om lege regels te verwijderen

    Hier is een vraag die gebruikers die meerdere regels in een cel hebben vaak stellen: "Er zijn veel lege regels in mijn cellen. Is er een manier om ze kwijt te raken anders dan door elke cel te gaan en elke regel handmatig te verwijderen?" Het antwoord: Dat is gemakkelijk!

    Om overeen te komen met lege regels die geen enkel teken bevatten vanaf het begin ^ van de huidige regel tot de volgende regel ^, is de regex:

    Patroon : ^\n

    Als uw visueel lege regels spaties of tabs bevatten, gebruik dan deze reguliere expressie:

    Patroon .

    Vervang gewoon de regex door een lege string met deze formule, en alle lege regels zijn in één keer weg!

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

    Spaties verwijderen met RegEx-tools

    De bovenstaande voorbeelden tonen slechts een klein deel van de prachtige mogelijkheden die regexen bieden. Helaas zijn niet alle functies van klassieke reguliere expressies beschikbaar in VBA.

    Gelukkig zijn de RegEx Tools in onze Ultimate Suite vrij van deze beperkingen, omdat ze worden verwerkt door Microsoft's .NET RegEx engine. Hiermee kunt u meer verfijnde patronen construeren die niet worden ondersteund door VBA RegExp. Hieronder vindt u een voorbeeld van zo'n reguliere expressie.

    Regex om spaties tussen getallen te verwijderen

    Stel dat u in een alfanumerieke tekenreeks alleen de spaties tussen getallen wilt verwijderen, zodat een tekenreeks als "A 1 2 B" wordt "A 12 B".

    Om een spatie tussen twee willekeurige cijfers te vinden, kunt u de volgende look-arounds gebruiken:

    Patroon : (?<=))

    Om een formule te maken op basis van de bovenstaande regexen, zijn hier twee eenvoudige stappen uit te voeren:

    1. Op de Ablebits gegevens tabblad, in de Tekst groep, klik Regex gereedschap .

    2. Op de Regex gereedschap deelvenster, selecteer de brongegevens, voer uw regex in, kies de Verwijder optie, en druk op Verwijder .

      Om de resultaten als formules en niet als waarden te krijgen, moet u een vinkje zetten in het veld Invoegen als een formule check box.

    Zo meteen zie je de AblebitsRegexRemove functie ingevoegd in een nieuwe kolom rechts van de oorspronkelijke gegevens.

    Als alternatief kunt u de regex invoeren in een cel, bijvoorbeeld A5, en de formule rechtstreeks in een cel invoegen met behulp van de Functie invoegen dialoogvenster, waar AblebitsRegexRemove is gecategoriseerd onder AblebitsUDFs .

    Aangezien deze functie speciaal is ontworpen voor het verwijderen van tekenreeksen, heeft zij slechts twee argumenten nodig - de invoerstring en de regex:

    =AblebitsRegexRemove(A5, $A$2)

    Zo verwijder je spaties in Excel met behulp van reguliere expressies. Ik dank je voor het lezen en zie je graag volgende week op onze blog!

    Beschikbare downloads

    Witruimte verwijderen met regex - voorbeelden (.xlsm-bestand)

    Ultimate Suite - proefversie (.exe bestand)

    Michael Brown is een toegewijde technologieliefhebber met een passie voor het vereenvoudigen van complexe processen met behulp van softwaretools. Met meer dan tien jaar ervaring in de technische industrie heeft hij zijn vaardigheden in Microsoft Excel en Outlook, evenals Google Spreadsheets en Documenten aangescherpt. Michael's blog is gewijd aan het delen van zijn kennis en expertise met anderen, met eenvoudig te volgen tips en tutorials voor het verbeteren van de productiviteit en efficiëntie. Of je nu een doorgewinterde professional of een beginner bent, Michaels blog biedt waardevolle inzichten en praktisch advies om het meeste uit deze essentiële softwaretools te halen.