Excel: Extrahera nummer från textsträng

  • Dela Detta
Michael Brown

I handledningen visas hur du extraherar tal från olika textsträngar i Excel med hjälp av formler och extraheringsverktyget.

När det gäller att extrahera en del av en textsträng av en viss längd tillhandahåller Excel tre funktioner för delsträngar (vänster, höger och mitten) för att snabbt hantera uppgiften. När det gäller att extrahera siffror från en alfanumerisk sträng tillhandahåller Microsoft Excel... ingenting.

För att få fram ett tal från en sträng i Excel krävs lite uppfinningsrikedom, lite tålamod och en massa olika funktioner som är inbäddade i varandra. Du kan också köra verktyget Extrahera och få jobbet gjort med ett musklick. Nedan hittar du fullständig information om båda metoderna.

    Hur man extraherar nummer från slutet av en textsträng

    När du har en kolumn med alfanumeriska strängar där nummer kommer efter text kan du använda följande formel för att få fram det.

    RÄTT( cell , LEN( cell ) - MAX(IF(ISNUMBER(MID( cell , ROW(INDIRECT("1:"&LEN( cell ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cell ))), 0)))

    Vi kommer att diskutera formelns logik lite senare. För tillfället ersätter du helt enkelt cell med en hänvisning till cellen som innehåller den ursprungliga strängen (A2 i vårt fall) och skriv in formeln i en tom cell på samma rad, till exempel B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))))

    Den här formeln hämtar bara nummer från slutet. Om en sträng också har nummer i början eller mitten ignoreras de:

    Extraktionen utförs med funktionen RIGHT som hör till kategorin Textfunktioner. Utdragningen av denna funktion är alltid text I vårt fall är resultatet en numerisk delsträng , vilket i Excel också är text, inte siffror.

    Om du vill att resultatet ska vara en nummer (som du kan använda i fortsatta beräkningar), och lägg sedan in formeln i VALUE-funktionen eller utför en aritmetisk operation som inte ändrar resultatet, t.ex. multiplicera med 1 eller addera 0. För att fånga upp fel i strängar som inte innehåller ett enda tal, använd IFERROR-funktionen. Exempel: IFERROR:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    eller .

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))) +0, "")

    Observera: I Excel med dynamisk matris (Office 365 och 2021) anger du formeln på vanligt sätt med Enter-tangenten. I Excel 2019 och tidigare fungerar det bara som en matrisformel, så kom ihåg att trycka på Ctrl + Shift + Enter för att slutföra formeln.

    Hur denna formel fungerar:

    Om du vill extrahera ett nummer från en alfanumerisk sträng måste du först veta var du ska börja extrahera. Positionen för det sista icke-numeriska tecknet i en sträng bestäms med hjälp av den här knepiga formeln:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    För att förstå logiken ska vi undersöka den inifrån:

    Kombinationen ROW(INDIRECT("1:"&LEN(A2)))) skapar en sekvens av nummer som motsvarar det totala antalet tecken i källsträngen (A2), och dessa sekventiella nummer används i MID som startnummer:

    MID(A2, {1;2;3;3;4;5;5;6;7;8}, 1)

    MID-funktionen hämtar varje enskilt tecken från A2 och returnerar dem som en array:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Eftersom MID är en textfunktion är resultatet alltid text (som du märker är alla tecken omslutna av citationstecken). För att omvandla numeriska ettor till siffror multiplicerar vi matrisen med 1 (dubbel negation --MID() har samma effekt). Resultatet av denna operation är en matris med siffror och #VALUE!-fel som representerar icke-numeriska tecken:

    ISNUMBER({0;5;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;#VÄRDE!;0;1})

    Funktionen ISNUMBER utvärderar varje element i matrisen och ger sitt utslag i form av boolska värden - TRUE för siffror, FALSE för allt annat:

    {SANN;SANT;SANT;FALSKT;FALSKT;FALSKT;FALSKT;FALSKT;SANT;SANT;SANT}

    Denna matris går till det logiska testet i IF-funktionen, där varje element i matrisen jämförs med FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    För varje FALSE (icke-numeriskt värde) returnerar en annan ROW(INDIRECT())-funktion dess relativa position i strängen. För varje TRUE (numeriskt värde) returneras en nolla. Den resulterande matrisen ser ut på följande sätt:

    {0;0;3;4;5;6;0;0}

    Resten är enkelt: MAX-funktionen hittar det högsta talet i ovanstående array, vilket är positionen för det sista icke-numeriska värdet i strängen (6 i vårt fall). Subtrahera helt enkelt denna position från strängens totala längd som returneras av LEN och skicka resultatet till RIGHT för att låta den veta hur många tecken den ska extrahera från strängens högra sida:

    HÖGER(A2, LEN(A2) - 6)

    Klart!

    Hur man extraherar nummer från början av en textsträng

    Om du arbetar med poster där text visas efter nummer kan du extrahera nummer från början av en sträng med hjälp av den här generiska formeln:

    VÄNSTER( cell , MATCH(FALSE, ISNUMBER(MID( cell , ROW(INDIRECT("1:"&LEN( cell )+1)), 1) *1), 0) -1)

    Med den ursprungliga strängen i A2 använder du följande formel för att få fram antalet:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1))), 1) *1), 0) -1)

    Oavsett hur många siffror som finns i mitten eller slutet extraheras endast startnumret:

    Observera: I Excel 365 och Excel 2021 fungerar en vanlig formel bra på grund av stödet för dynamiska matriser. I Excel 2019 och tidigare ska du trycka på Ctrl + Shift + Enter för att uttryckligen göra det till en formel. formel för matris .

    Hur denna formel fungerar:

    Här använder vi återigen kombinationen av funktionerna ROW, INDIRECT och LEN för att skapa en sekvens av nummer som är lika med det totala antalet tecken i källsträngen plus 1 (det extra tecknets roll kommer att framgå lite senare).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID och ISNUMBER gör samma sak som i det föregående exemplet - MID hämtar enskilda tecken och ISNUMBER omvandlar dem till logiska värden. Den resulterande matrisen av TRUE och FALSE går till MATCH-funktionen som en uppslags-matris:

    MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}, 0)

    MATCH beräknar en relativ position för det första FALSE, vilket ger oss positionen för det första icke-numeriska tecknet i strängen (3 i A2). För att extrahera de föregående siffrorna subtraherar vi 1 från positionen för det första texttecknet och serverar skillnaden till num_chars argumentet i LEFT-funktionen:

    VÄNSTER(A2, 3-1)

    Nu återgår vi till ett "extra" tecken i sekvensen som genereras av ROW(INDIRECT()+1))). Som du redan vet ger denna sekvens utgångspunkterna för MID-funktionen. Utan +1 skulle MID hämta exakt lika många tecken som det finns i den ursprungliga strängen. Om strängen endast innehåller siffror kommer ISNUMBER endast att ge TRUE, medan MATCH behöver minst en FALSE. För att säkerställa detta lägger vi till enytterligare ett tecken till strängens totala längd, som MID-funktionen omvandlar till en tom sträng. I B7 returnerar MID till exempel denna matris:

    {"1"; "2"; "3"; "4";""}

    Observera: Precis som med funktionen RIGHT returnerar LEFT också en numerisk delsträng Om du vill få resultatet som ett nummer i stället för en numerisk sträng, bäddar du in formeln i VALUE-funktionen eller multiplicerar resultatet med 1 som i det första exemplet.

    Hur man får fram ett nummer från vilken position som helst i en sträng

    Om din uppgift innebär att du ska extrahera ett tal från en valfri plats i en sträng kan du använda följande häpnadsväckande formel som publicerats på MrExcel-forumet:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    Där A2 är den ursprungliga textsträngen.

    För att bryta ner denna formel skulle det krävas en separat artikel, så du kan helt enkelt kopiera den till ditt kalkylblad för att kontrollera att den verkligen fungerar :)

    När du granskar resultaten kan du dock märka en obetydlig nackdel - om källsträngen inte innehåller något nummer returnerar formeln noll, som i rad 6 i skärmdumpen ovan. För att åtgärda detta kan du linda in formeln i IF-angivelsen, vars logiska test kontrollerar om källsträngen innehåller något nummer. Om den gör det extraherar formeln numret, annars returnerar formeln en tomsträng:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Som framgår av skärmdumpen nedan fungerar den förbättrade formeln utmärkt (beröm till Alex, vår Excel-guru, för den här förbättringen):

    Till skillnad från alla tidigare exempel är resultatet av denna formel nummer För att försäkra dig om detta kan du notera de högerjusterade värdena i kolumn B och de trunkerade inledande nollorna.

    Tips: I Excel 365 - Excel 2019 finns det en mycket enklare lösning med hjälp av TEXTJOIN-funktionen. Se Hur du tar bort text och behåller siffror.

    Extrahera nummer från en textsträng med Ultimate Suite

    Som du just har sett finns det ingen trivial Excel-formel för att ta fram ett nummer från en textsträng. Om du har svårt att förstå formlerna eller att anpassa dem till dina datamängder kanske du gillar det här enkla sättet att ta fram ett nummer från en textsträng i Excel.

    Med vår Ultimate Suite i Excel-bandet kan du snabbt hämta ett nummer från vilken alfanumerisk sträng som helst:

    1. Gå till Uppgifter om Ablebits flik> Text grupp och klicka på Utdrag :

    2. Markera alla celler med källsträngarna.
    3. I rutan för extraktionsverktyget väljer du Utdragsnummer radioknappen.
    4. Beroende på om du vill att resultaten ska vara formler eller värden, väljer du Infoga som formel eller låt den vara oavmarkerad (standard).

      Jag råder dig att markera den här rutan om du vill att de extraherade siffrorna ska uppdateras automatiskt så snart ändringar görs i källsträngarna. Om du vill att resultaten ska vara oberoende av de ursprungliga strängarna (t.ex. om du planerar att ta bort källdata vid ett senare tillfälle), markera inte den här rutan.

    5. Klicka på Infoga resultat knappen. Klart!

    Precis som i det föregående exemplet är resultaten av utvinningen följande nummer Det betyder att du kan räkna, summera, göra medelvärden eller utföra andra beräkningar med dem.

    I det här exemplet har vi valt att infoga resultaten som värden , och tillägget gjorde exakt vad jag bad om:

    Om den Infoga som formel kryssrutan var markerad, skulle du se en formel i formellfältet. Vill du veta vilken? Ladda ner Ultimate Suite's testversion och se själv :)

    Tillgängliga nedladdningar

    Excel Extract Number - exempelarbetsbok (.xlsx-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.