Inhoudsopgave
In deze handleiding leert u hoe u tekst en getallen in Excel kunt scheiden met behulp van eigen formules en aangepaste functies. U leert ook hoe u tekst en getallen kunt splitsen in twee afzonderlijke kolommen.
Stel u voor: u ontvangt ruwe gegevens voor analyse en ontdekt dat in één kolom getallen met tekst zijn vermengd. In de meeste situaties zal het zeker handiger zijn om ze in aparte kolommen te hebben voor nader onderzoek.
Als u werkt met homogene gegevens, kunt u waarschijnlijk de functies LINKS, RECHTS en MID gebruiken om hetzelfde aantal tekens uit dezelfde positie te halen. Maar dat is een ideaal scenario voor laboratoriumtests. In het echte leven zult u waarschijnlijk te maken hebben met ongelijke gegevens waarbij getallen voor tekst, na tekst of tussen tekst komen. De onderstaande voorbeelden bieden hiervoor oplossingenzaak.
Hoe tekst verwijderen en getallen behouden in Excel-cellen
De oplossing werkt in Excel 365, Excel 2021 en Excel 2019.
Microsoft Excel 2019 heeft een paar nieuwe functies geïntroduceerd die niet beschikbaar zijn in eerdere versies, en we gaan een van die functies gebruiken, namelijk TEXTJOIN, om tekstkarakters te strippen uit een cel die getallen bevat.
De algemene formule is:
TEXTJOIN("", TRUE, IFERROR(MID( cel , ROW(INDIRECT( "1:"&LEN( cel ))), 1) *1, ""))In Excel 365 en 2021 werkt deze ook:
TEXTJOIN("", TRUE, IFERROR(MID( cel , SEQUENCE(LEN( cel )), 1) *1, ""))Op het eerste gezicht zien de formules er misschien wat intimiderend uit, maar ze werken wel degelijk :)
Om bijvoorbeeld tekst uit getallen in A2 te verwijderen, voert u een van de onderstaande formules in B2 in, en kopieert u deze naar zoveel cellen als nodig.
In Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
In Excel 2019 moet het worden ingevoerd als een matrixformule met Ctrl + Shift + Enter . In dynamische matrix Excel werkt het als een normale formule aangevuld met de Enter-toets.
In Excel 365 en 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Het resultaat is dat alle teksttekens uit een cel worden verwijderd en getallen worden behouden:
Hoe deze formule werkt:
Om de logica beter te begrijpen, laten we de formule van binnenuit onderzoeken:
U gebruikt ofwel ROW(INDIRECT("1:"&LEN(string)) of SEQUENCE(LEN(string)) om een reeks getallen te creëren die overeenkomt met het totale aantal tekens in de bronstring, en voert deze opeenvolgende getallen vervolgens in de MID-functie in als de begingetallen. In B2 ziet dit deel van de formule er als volgt uit:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
De MID-functie haalt elk teken uit A2, beginnend bij het allereerste, en geeft ze terug als een array:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Deze matrix wordt vermenigvuldigd met 1. Numerieke waarden overleven zonder verandering, terwijl het vermenigvuldigen van een niet-numeriek teken resulteert in een #VALUE! fout:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
De IFERROR-functie behandelt deze fouten en vervangt ze door lege strings:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Deze uiteindelijke matrix wordt doorgegeven aan de TEXTJOIN-functie, die de niet-lege waarden in de matrix ( negeer_leeg argument ingesteld op TRUE) met een lege tekenreeks ("") als scheidingsteken:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Tip. Voor Excel 2016 - 2007 bestaat er ook een oplossing, maar de formule is veel complexer. U vindt die in deze tutorial: Hoe cijfers extraheren in Excel.
Aangepaste functie om tekst uit getallen te verwijderen
De oplossing werkt voor alle Excel-versies
Als u een oudere versie van Excel gebruikt of de bovenstaande formules te moeilijk vindt om te onthouden, belet niets u om uw eigen functie te maken met een eenvoudiger syntaxis en een gebruiksvriendelijke naam zoals RemoveText De door de gebruiker gedefinieerde functie (UDF) kan op twee manieren worden geschreven:
VBA code 1:
Hier bekijken we elk teken in de bronstring één voor één en controleren of het numeriek is of niet. Indien het een getal is, wordt het teken toegevoegd aan de resulterende string.
Functie RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA code 2:
De code maakt een object om een reguliere uitdrukking te verwerken. Met RegExp verwijderen we alle andere tekens dan de cijfers 0-9 uit de bronstring.
Functie RemoveText(str Als String ) Als String Met CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionOp kleine werkbladen zullen beide codes even goed werken. Op grote werkbladen waar de functie honderden of duizenden keren wordt aangeroepen, zal code 2 die VBScript.RegExp gebruikt, sneller werken.
De gedetailleerde stappen om de code in uw werkmap in te voegen vindt u hier: Hoe VBA-code in Excel in te voegen.
Welke benadering u ook kiest, vanuit het oogpunt van de eindgebruiker is de functie om tekst te wissen en nummers te laten staan zo eenvoudig:
RemoveText(string)Om bijvoorbeeld niet-numerieke tekens uit cel A2 te verwijderen, is de formule in B2:
=RemoveText(A2)
Kopieer het gewoon in de kolom, en je krijgt dit resultaat:
Opmerking. Zowel de eigen formules als de aangepaste functie geven een numerieke tekenreeks Om het in een getal te veranderen, vermenigvuldig je het resultaat met 1, of voeg je nul toe, of verpak je de formule in de functie WAARDE. Bijvoorbeeld:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Hoe verwijder je getallen uit een tekststring in Excel
De oplossing werkt in Excel 365, Excel 2021 en Excel 2019.
De formules om getallen uit een alfanumerieke tekenreeks te verwijderen zijn vrijwel gelijk aan die in het vorige voorbeeld.
Voor Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( cel , ROW(INDIRECT( "1:"&LEN( cel )), 1) *1), MID( cel , ROW(INDIRECT("1:"&LEN( cel ))), 1), ""))Denk er in Excel 2019 aan om er een matrixformule door de toetsen Ctrl + Shift + Enter tegelijk in te drukken.
Voor Excel 365 en 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( cel , SEQUENCE(LEN( cel 1) *1), MID( cel , SEQUENCE(LEN( cel )), 1), ""))Bijvoorbeeld, om getallen uit een string in A2 te strippen, is de formule:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Of
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2), SEQUENCE(LEN(A2)), 1) *1), MID(A2), SEQUENCE(LEN(A2)), 1), ""))
Het resultaat is dat alle cijfers uit een cel worden verwijderd en teksttekens worden behouden:
Zoals de bovenstaande schermafbeelding laat zien, stript de formule numerieke tekens van elke positie in een tekenreeks: aan het begin, aan het eind en in het midden. Er is echter een voorbehoud: als een tekenreeks begint met een getal gevolgd door een spatie , blijft die spatie behouden, wat een probleem oplevert van leidende spaties (zoals in B2).
Om zich te ontdoen van extra spaties voor tekst wikkel de formule in de TRIM-functie als volgt:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Je resultaten zijn absoluut perfect!
Hoe deze formule werkt:
In wezen werkt de formule hetzelfde als in het vorige voorbeeld. Het verschil is dat je uit de uiteindelijke array die naar de TEXTJOIN-functie wordt geserveerd, getallen moet verwijderen, geen tekst. Om dat te laten gebeuren, gebruiken we de combinatie van IF- en ISERROR-functies.
Zoals u zich herinnert, genereert MID(...)+0 een array van getallen en #VALUE! fouten die tekstkarakters op dezelfde posities voorstellen:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
De functie ISERROR vangt de fouten op en geeft de resulterende array van Booleaanse waarden door aan IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Wanneer de IF-functie TRUE ziet (een fout), voegt hij met behulp van een andere MID-functie het overeenkomstige tekstteken in de verwerkte matrix in. Wanneer de IF-functie FALSE ziet (een getal), vervangt hij dit door een lege tekenreeks:
{\an5}}"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Deze uiteindelijke array wordt doorgegeven aan TEXTJOIN, zodat deze de tekstkarakters aan elkaar rijgt en het resultaat uitvoert.
Aangepaste functie om getallen uit tekst te verwijderen
De oplossing werkt voor alle Excel-versies
In gedachten houdend dat een robuuste formule eenvoudig moet worden gehouden, deel ik de code van de user-defined function (UDF) om elk numeriek teken weg te strepen.
VBA code 1:
Functie RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionVBA code 2:
Functie RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionNet als de functie RemoveText kan de tweede code beter worden gebruikt in grote werkbladen om de prestaties te optimaliseren.
Zodra de code aan uw werkmap is toegevoegd, kunt u alle numerieke tekens uit een cel verwijderen met deze aangepaste functie:
RemoveNumbers(string)In ons geval is de formule in B2:
=RemoveNumbers(A2)
Om eventuele voorloopspaties te trimmen, nestelt u de aangepaste functie in TRIM zoals u dat in een oorspronkelijke formule zou doen:
=TRIM(RemoveNumbers(A2))
Splits nummers en tekst in afzonderlijke kolommen
In situaties waarin u tekst en getallen wilt scheiden in twee kolommen, zou het prettig zijn om de klus te klaren met een enkele formule, nietwaar? Hiervoor voegen we gewoon de code van de RemoveText en RemoveNumbers functies in één functie, genaamd SplitTextNumbers of gewoon Gesplitst of wat je maar wilt :)
VBA code 1:
Functie SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If EndFunctieVBA code 2:
Functie SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ("VBScript.RegExp" ) .Global = True Als True = is_remove_text Dan .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionOnze nieuwe aangepaste functie heeft twee argumenten nodig:
SplitTextNumbers(string, is_remove_text)Waar is_remove_text is een Booleaanse waarde die aangeeft welke tekens moeten worden gestreept:
- TRUE of 1 - tekst verwijderen en getallen behouden
- FALSE of 0 - nummers verwijderen en tekst behouden
Voor onze voorbeelddataset nemen de formules deze vorm aan:
Om niet-numerieke tekens te verwijderen:
=SplitTextNumbers(A2, TRUE)
Om numerieke tekens te verwijderen:
=SplitTextNumbers(A2, FALSE)
Tip. Om een potentieel probleem van leidende spaties te voorkomen, raad ik aan de formule die getallen verwijdert altijd in te pakken in de TRIM-functie:
=TRIM(SplitTextNumbers(A2, FALSE))
Speciaal gereedschap om nummers of tekst te verwijderen
Voor degenen die de zaken niet onnodig ingewikkeld willen maken, laat ik onze eigen manier zien om tekst of getallen in Excel te verwijderen.
Ervan uitgaande dat onze Ultimate Suite is toegevoegd aan uw Excel-lint, is dit wat u doet:
- Op de Ablebits gegevens tabblad, in de Tekst groep, klik Verwijder > Tekens verwijderen .
Tip. Als de resultaten voorloopspaties bevatten, verwijdert het gereedschap Ruimtes bijsnijden deze in een handomdraai.
Dat is hoe je tekst of numerieke tekens verwijdert uit een tekenreeks in Excel. Ik dank je voor het lezen en zie je graag volgende week op onze blog!
Beschikbare downloads
Tekst of getallen verwijderen in Excel - voorbeelden (.xlsm-bestand)
Ultimate Suite - proefversie (.exe bestand)