Hur du tar bort text eller siffror från en Excel-cell

  • Dela Detta
Michael Brown

I den här handledningen lär du dig hur du separerar text från siffror i Excel med hjälp av formler och anpassade funktioner. Du lär dig också hur du delar upp text och siffror i två separata kolumner.

Tänk dig detta: du får rådata för analys och upptäcker att siffror blandas med text i en kolumn. I de flesta situationer är det säkert bekvämare att ha dem i separata kolumner för närmare granskning.

Om du arbetar med homogena data kan du förmodligen använda funktionerna LEFT, RIGHT och MID för att extrahera samma antal tecken från samma position. Men det är ett idealiskt scenario för laboratorietester. I verkligheten är det troligt att du har att göra med olika data där siffror kommer före, efter eller mellan text. Nedanstående exempel ger lösningar för just detta.fall.

    Hur du tar bort text och behåller siffror i Excel-celler

    Lösningen fungerar i Excel 365, Excel 2021 och Excel 2019.

    Microsoft Excel 2019 introducerade några nya funktioner som inte finns i tidigare versioner, och vi ska använda en av dessa funktioner, nämligen TEXTJOIN, för att ta bort texttecken från en cell som innehåller siffror.

    Den generiska formeln är:

    TEXTJOIN("", TRUE, IFERROR(MID( cell , ROW(INDIRECT( "1:"&LEN( cell ))), 1) *1, ""))

    I Excel 365 och 2021 fungerar den här också:

    TEXTJOIN("", TRUE, IFERROR(MID( cell , SEKVENS(LEN( cell )), 1) *1, ""))

    Vid första anblicken kan formlerna se lite skrämmande ut, men de fungerar faktiskt :)

    Om du till exempel vill ta bort text från siffror i A2 skriver du in en av nedanstående formler i B2 och kopierar den sedan ner till så många celler som behövs.

    I Excel 365 - 2019:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))

    I Excel 2019 måste den skrivas in som en matrisformel med Ctrl + Shift + Enter . I Excel med dynamisk matris fungerar den som en vanlig formel som avslutas med Enter-tangenten.

    I Excel 365 och 2021:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))

    Resultatet är att alla texttecken tas bort från en cell och siffrorna behålls:

    Hur denna formel fungerar:

    För att bättre förstå logiken börjar vi undersöka formeln inifrån:

    Du använder antingen ROW(INDIRECT("1:"&LEN(string))) eller SEQUENCE(LEN(string)) för att skapa en sekvens av siffror som motsvarar det totala antalet tecken i källsträngen, och sedan matar du in dessa sekventiella siffror till MID-funktionen som startnummer. I B2 ser den här delen av formeln ut på följande sätt:

    MID(A2, {1;2;3;3;4;4;5;5;6;6;7;7;8;9;9;10;11;11;12;13;14;15}, 1)

    MID-funktionen extraherar varje tecken från A2 från och med det allra första och returnerar dem som en array:

    {"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}

    Den här matrisen multipliceras med 1. Numeriska värden överlever utan förändring, medan multiplicering av ett icke-numeriskt tecken resulterar i ett #VALUE!-fel:

    {2;1;0;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!}

    IFERROR-funktionen hanterar dessa fel och ersätter dem med tomma strängar:

    {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}

    Den slutliga matrisen skickas till TEXTJOIN-funktionen, som sammanfogar de icke-tomma värdena i matrisen ( ignore_empty argumentet är satt till TRUE) och använder en tom sträng ("") som avgränsare:

    TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})

    Tips: För Excel 2016 - 2007 finns det också en lösning, men formeln är mycket mer komplicerad. Du hittar den i den här handledningen: Hur man extraherar siffror i Excel.

    Anpassad funktion för att ta bort text från siffror

    Lösningen fungerar för alla Excel-versioner

    Om du använder en äldre version av Excel eller om du tycker att ovanstående formler är för svåra att komma ihåg, finns det inget som hindrar dig från att skapa en egen funktion med en enklare syntax och ett användarvänligt namn, t.ex. RemoveText Den användardefinierade funktionen (UDF) kan skrivas på två sätt:

    VBA-kod 1:

    Här tittar vi på varje tecken i källsträngen ett och ett och kontrollerar om det är numeriskt eller ej. Om det är ett nummer läggs tecknet till i den resulterande strängen.

    Funktion 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 Function

    VBA-kod 2:

    Koden skapar ett objekt för att bearbeta ett reguljärt uttryck. Med hjälp av RegExp tar vi bort alla andra tecken än siffrorna 0-9 från källsträngen.

    Funktion RemoveText(str As String ) As String Med CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Slutar Med Slutar Funktion

    På små arbetsblad fungerar båda koderna lika bra, men på stora arbetsblad där funktionen anropas hundratals eller tusentals gånger fungerar kod 2 som använder VBScript.RegExp snabbare.

    De detaljerade stegen för att infoga koden i arbetsboken finns här: Hur man infogar VBA-kod i Excel.

    Oavsett vilket tillvägagångssätt du väljer är funktionen för att radera text och lämna kvar siffror så enkel som denna:

    RemoveText(sträng)

    Om du till exempel vill ta bort icke-numeriska tecken från cell A2 är formeln i B2:

    =RemoveText(A2)

    Kopiera det bara ner i kolumnen, så får du detta resultat:

    Observera att både de ursprungliga formlerna och den anpassade funktionen ger ut en numerisk sträng Om du vill omvandla det till ett tal multiplicerar du resultatet med 1, lägger till noll eller sveper in formeln i VALUE-funktionen. Till exempel:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    Hur man tar bort siffror från textsträngar i Excel

    Lösningen fungerar i Excel 365, Excel 2021 och Excel 2019.

    Formlerna för att ta bort siffror från en alfanumerisk sträng är ganska lika de som diskuterades i föregående exempel.

    För Excel 365 - 2019:

    TEXTJOIN("", TRUE, IF(ISERR(MID( cell , ROW(INDIRECT( "1:"&LEN( cell ) ) )), 1) *1), MID( cell , ROW(INDIRECT("1:"&LEN( cell ))), 1), ""))

    I Excel 2019 ska du komma ihåg att göra det till en formel för matris genom att trycka på tangenterna Ctrl + Shift + Enter samtidigt.

    För Excel 365 och 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEKVENS(LEN( cell 1) *1), MID( cell , SEKVENS(LEN( cell )), 1), ""))

    Om du till exempel vill ta bort siffror från en sträng i A2 är formeln:

    =TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))

    Eller

    =TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))

    Resultatet är att alla siffror tas bort från en cell och att texttecken behålls:

    Som visas i skärmdumpen ovan tar formeln bort numeriska tecken från alla positioner i en sträng: i början, i slutet och i mitten. Det finns dock en invändning: om en sträng börjar med ett nummer följt av ett mellanslag behålls detta mellanslag, vilket leder till problem med ledande mellanslag (som i B2).

    För att bli av med extra mellanslag före texten , och omsluta formeln i TRIM-funktionen på följande sätt:

    =TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))

    Nu är dina resultat helt perfekta!

    Hur denna formel fungerar:

    I huvudsak fungerar formeln på samma sätt som i det föregående exemplet. Skillnaden är att från den slutliga matrisen som serveras till TEXTJOIN-funktionen måste du ta bort siffror, inte text. För att få det gjort använder vi en kombination av funktionerna IF och ISERROR.

    Som du minns genererar MID(....)+0 en matris med siffror och #VALUE! fel som representerar texttecken på samma positioner:

    {2;1;0;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!}

    Funktionen ISERROR fångar upp felen och skickar den resulterande matrisen av booleska värden till IF:

    {FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}

    När IF-funktionen ser TRUE (ett fel) infogar den motsvarande texttecken i den bearbetade matrisen med hjälp av en annan MID-funktion. När IF-funktionen ser FALSE (ett tal) ersätter den det med en tom sträng:

    {"";"";"";"";""; "S"; "u"; "n"; "s"; "e"; "t";"" "; "R"; "o"; "a"; "d"}

    Den slutliga matrisen överförs till TEXTJOIN, så att den sammanfogar texttecknen och ger ut resultatet.

    Anpassad funktion för att ta bort siffror från text

    Lösningen fungerar för alla Excel-versioner

    Med tanke på att en robust formel bör hållas enkel kommer jag att dela med mig av koden för den användardefinierade funktionen (UDF) för att ta bort alla numeriska tecken.

    VBA-kod 1:

    Funktion 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 Function

    VBA-kod 2:

    Funktion RemoveNumbers(str As String ) As String Med CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End Function

    Precis som i fallet med RemoveText-funktionen är det bättre att använda den andra koden i stora kalkylblad för att optimera prestandan.

    När koden har lagts till i arbetsboken kan du ta bort alla numeriska tecken från en cell med den här anpassade funktionen:

    RemoveNumbers(sträng)

    I vårt fall är formeln i B2 följande:

    =RemoveNumbers(A2)

    Om du vill trimma eventuella inledande mellanslag, bäddar du in den anpassade funktionen i TRIM på samma sätt som du skulle göra med en formel från en annan formel:

    =TRIM(Ta bort nummer(A2))

    Dela upp siffror och text i separata kolumner

    När du vill separera text och siffror i två kolumner skulle det vara trevligt att göra jobbet med en enda formel, håller du med? För att göra detta slår vi bara ihop koden för RemoveText och RemoveNumbers funktioner till en funktion, som heter SplitTextNumbers , eller helt enkelt Split , eller vad du vill :)

    VBA-kod 1:

    Funktion 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 End IfFunktion

    VBA-kod 2:

    Funktion SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ("VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function

    Vår nya anpassade funktion kräver två argument:

    SplitTextNumbers(sträng, is_remove_text)

    Var is_remove_text är ett boolskt värde som anger vilka tecken som ska tas bort:

    • TRUE eller 1 - tar bort texten och behåller siffrorna
    • FALSE eller 0 - tar bort siffror och behåller texten

    För vårt datamaterial har formlerna följande form:

    Om du vill ta bort icke-numeriska tecken:

    =SplitTextNumbers(A2, TRUE)

    Ta bort numeriska tecken:

    =SplitTextNumbers(A2, FALSE)

    Tips: För att undvika eventuella problem med ledande mellanslag rekommenderar jag att du alltid omsluter formeln som tar bort siffror i TRIM-funktionen:

    =TRIM(SplitTextNumbers(A2, FALSE))

    Specialverktyg för att ta bort siffror eller text

    För dem som inte gillar att komplicera saker i onödan ska jag visa vårt eget sätt att ta bort text eller siffror i Excel.

    Om du antar att vår Ultimate Suite har lagts till i Excel-bandet gör du så här:

    1. På den Uppgifter om Ablebits på fliken Text grupp, klicka på Ta bort > Ta bort tecken .

  • Välj källområdet i tilläggsrutan, välj källområdet, välj Ta bort teckenuppsättningar och välj antingen Text tecken eller . Numerisk tecken i rullgardinslistan.
  • Hit Ta bort och njut av resultatet :)
  • Tips: Om resultatet innehåller några inledande mellanslag, kan du med verktyget Trim Spaces ta bort dem på nolltid.

    Så här tar du bort text eller numeriska tecken från en sträng i Excel. Tack för att du läste och jag ser fram emot att se dig på vår blogg nästa vecka!

    Tillgängliga nedladdningar

    Ta bort text eller siffror i Excel - exempel (.xlsm-fil)

    Ultimate Suite - testversion (.exe-fil)

    Michael Brown är en hängiven teknikentusiast med en passion för att förenkla komplexa processer med hjälp av mjukvaruverktyg. Med mer än ett decenniums erfarenhet inom teknikbranschen har han finslipat sina kunskaper i Microsoft Excel och Outlook, samt Google Sheets och Docs. Michaels blogg är tillägnad att dela med sig av sin kunskap och expertis med andra, och tillhandahåller lätta att följa tips och handledningar för att förbättra produktiviteten och effektiviteten. Oavsett om du är en erfaren proffs eller nybörjare, erbjuder Michaels blogg värdefulla insikter och praktiska råd för att få ut det mesta av dessa viktiga programvaruverktyg.