Indholdsfortegnelse
Vejledningen viser, hvordan du udtrækker tal fra forskellige tekststrenge i Excel ved hjælp af formler og værktøjet Udtrække.
Når det drejer sig om at udtrække en del af en tekststreng af en given længde, tilbyder Excel tre Substring-funktioner (Venstre, Højre og Midt) til hurtigt at håndtere opgaven. Når det drejer sig om at udtrække tal fra en alfanumerisk streng, tilbyder Microsoft Excel... ingenting.
For at få et tal ud af en streng i Excel kræver det lidt opfindsomhed, lidt tålmodighed og en masse forskellige funktioner, der er indlejret i hinanden. Du kan også køre værktøjet Udtrække og få arbejdet gjort med et museklik. Nedenfor finder du alle detaljer om begge metoder.
Sådan udtrækkes nummer fra slutningen af en tekststreng
Når du har en kolonne med alfanumeriske strenge, hvor tal kommer efter tekst, kan du bruge følgende formel til at få det.
RIGHT( celle , LEN( celle ) - MAX(IF(ISNUMBER(MID( celle , ROW(INDIRECT("1:"&LEN( celle )))), 1) *1)=FALSK, RÆKKE(INDIRECT("1:"&LEN( celle ))), 0)))Vi kommer til at dvæle ved formlens logik lidt senere. Indtil videre skal du blot erstatte celle med en henvisning til den celle, der indeholder den oprindelige streng (A2 i vores tilfælde), og indtast formlen i en hvilken som helst tom celle i samme række, f.eks. i B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))))
Denne formel tager kun tal fra slutningen. Hvis en streng også har tal i begyndelsen eller midten, ignoreres de:
Udtrækket udføres med funktionen RIGHT, der hører til kategorien Tekstfunktioner. Udgangen af denne funktion er altid tekst I vores tilfælde er resultatet en numerisk delstreng , som i Excel også er tekst, ikke tal.
Hvis du har brug for, at resultatet skal være en nummer (som du kan bruge i yderligere beregninger), og pak formlen ind i VALUE-funktionen eller udfør en aritmetisk operation, der ikke ændrer resultatet, f.eks. multiplicer med 1 eller tilføj 0. For at opfange fejl i strenge, der ikke indeholder et enkelt tal, skal du bruge IFERROR-funktionen. F.eks:
=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, ""))
Bemærk: I Excel med dynamisk array (Office 365 og 2021) indtaster du formlen på den sædvanlige måde med Enter-tasten. I Excel 2019 og tidligere fungerer det kun som en array-formel, så husk at trykke på Ctrl + Shift + Enter for at fuldføre den.
Sådan fungerer denne formel:
For at udtrække tal fra en alfanumerisk streng skal du først og fremmest vide, hvor du skal starte udtrækningen. Placeringen af det sidste ikke-numeriske tegn i en streng bestemmes ved hjælp af denne vanskelige formel:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
For at forstå logikken skal vi undersøge den indefra:
Kombinationen ROW(INDIRECT("1:"&LEN(A2)))) skaber en sekvens af tal svarende til det samlede antal tegn i kildestrengen (A2), og vi serverer disse sekventielle tal for MID som startnumre:
MID(A2, {1;2;2;3;3;4;4;5;5;6;6;7;8}, 1)
MID-funktionen trækker hvert enkelt tegn fra A2 og returnerer dem som et array:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Da MID er en tekstfunktion, er dens output altid tekst (som du kan se, er alle tegn omsluttet af anførselstegn). For at omdanne numeriske ettere til tal multiplicerer vi arrayet med 1 (dobbelt negation --MID() vil have samme effekt). Resultatet af denne operation er et array af tal og #VALUE! fejl, der repræsenterer ikke-numeriske tegn:
ISNUMBER({0;5;#VÆRDI!;#VÆRDI!;#VÆRDI!;#VÆRDI!;#VÆRDI!;#VÆRDI!;#VÆRDI!;0;1})
Funktionen ISNUMBER evaluerer hvert element i arrayet og giver sin dom i form af boolske værdier - TRUE for tal og FALSE for alt andet:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}
Dette array går til den logiske test i IF-funktionen, hvor hvert element i arrayet sammenlignes med FALSE:
IF({TRUE;TRUE;FALSK;FALSK;FALSK;FALSK;FALSK;TRUE;TRUE;TRUE}=FALSK, ROW(INDIRECT("1:"&LEN(A2))), 0)
For hver FALSE (ikke-numerisk værdi) returnerer en anden ROW(INDIRECT())-funktion dens relative position i strengen. For hver TRUE (numerisk værdi) returneres et nul. Det resulterende array ser således ud:
{0;0;3;4;5;6;0;0}
Resten er let: MAX-funktionen finder det højeste tal i ovenstående array, som er positionen for den sidste ikke-numeriske værdi i strengen (6 i vores tilfælde). Træk blot denne position fra strengen, som er returneret af LEN, og giv resultatet til RIGHT for at fortælle den, hvor mange tegn den skal udtrække fra højre side af strengen:
RIGHT(A2, LEN(A2) - 6)
Færdig!
Sådan udtrækkes nummer fra begyndelsen af en tekststreng
Hvis du arbejder med poster, hvor der er tekst efter nummeret, kan du udtrække nummeret fra starten af en streng ved at bruge denne generiske formel:
VENSTRE( celle , MATCH(FALSE, ISNUMBER(MID( celle , ROW(INDIRECT("1:"&LEN( celle )+1)), 1) *1), 0) -1)Med den oprindelige streng i A2 kan du bruge følgende formel til at få tallet:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1))), 1) *1), 0) -1) -1)
Uanset hvor mange cifre der er i midten eller i slutningen, er det kun startnummeret, der udtrækkes:
Bemærk: I Excel 365 og Excel 2021 fungerer en almindelig formel fint på grund af understøttelsen af dynamiske arrays. I Excel 2019 og tidligere skal du trykke på Ctrl + Shift + Enter for at gøre det eksplicit til en array-formel .
Sådan fungerer denne formel:
Her bruger vi igen kombinationen af ROW-, INDIRECT- og LEN-funktionerne til at skabe en sekvens af tal svarende til det samlede antal tegn i kildestrengen plus 1 (det ekstra tegns rolle vil blive tydeliggjort lidt senere).
RÆKKE(INDIRECT("1:"&LEN(A2)+1)))
MID og ISNUMBER udfører det samme arbejde som i det foregående eksempel - MID trækker de enkelte tegn ud, og ISNUMBER konverterer dem til logiske værdier. Det resulterende array af TRUE's og FALSE's går til MATCH-funktionen som et opslagsarray:
MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}, 0)
MATCH beregner en relativ position for den første FALSE, hvilket giver os positionen for det første ikke-numeriske tegn i strengen (3 i A2). For at udtrække de foregående tal trækker vi 1 fra positionen for det første teksttegn og serverer forskellen til num_chars argumentet i LEFT-funktionen:
VENSTRE(A2, 3-1)
Nu tilbage til et "ekstra" tegn i sekvensen genereret af ROW(INDIRECT()+1))). Som du allerede ved, giver denne sekvens startpunkterne for MID-funktionen. Uden +1 ville MID udtrække præcis lige så mange tegn, som der er i den oprindelige streng. Hvis strengen kun indeholder tal, vil ISNUMBER kun returnere TRUE's, mens MATCH har brug for mindst én FALSE. For at sikre dette, tilføjer vi enflere tegn til den samlede længde af strengen, som MID-funktionen vil konvertere til en tom streng. I B7 returnerer MID f.eks. dette array:
{"1"; "2"; "3"; "4";""}
Bemærk. Som det er tilfældet med RIGHT-funktionen, returnerer LEFT også en numerisk delstreng Hvis du vil have resultatet som et tal i stedet for en numerisk streng, skal du indlejre formlen i VALUE-funktionen eller gange resultatet med 1 som vist i det første eksempel.
Sådan får du et tal fra en vilkårlig position i en streng
Hvis din opgave indebærer, at du skal udtrække et tal fra et vilkårligt sted i en streng, kan du bruge følgende utrolige formel, der er offentliggjort på MrExcel-forummet:
=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)
Hvor A2 er den oprindelige tekststreng.
Det ville kræve en separat artikel at gennemgå denne formel, så du kan blot kopiere den til dit regneark for at sikre dig, at den virkelig virker :)
Når du undersøger resultaterne, kan du dog bemærke en ubetydelig ulempe - hvis kildestrengen ikke indeholder et tal, returnerer formlen nul, som i række 6 i skærmbilledet ovenfor. For at løse dette kan du pakke formlen ind i IF-erklæringen, hvis logiske test kontrollerer, om kildestrengen indeholder et tal. Hvis den gør, udtrækker formlen tallet, ellers returnerer den et tomtstreng:
=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 det fremgår af skærmbilledet nedenfor, fungerer den forbedrede formel perfekt (ros til Alex, vores Excel-guru, for denne forbedring):
I modsætning til alle de foregående eksempler er resultatet af denne formel nummer For at sikre sig dette, skal man blot lægge mærke til de højrejusterede værdier i kolonne B og de afkortede forreste nuller.
Tip. I Excel 365 - Excel 2019 er der en meget enklere løsning ved hjælp af funktionen TEXTJOIN. Se Sådan fjerner du tekst og beholder tal.
Udtrække nummer fra tekststreng med Ultimate Suite
Som du lige har set, er der ikke nogen triviel Excel-formel til at trække tal fra en tekststreng. Hvis du har svært ved at forstå formlerne eller tilpasse dem til dine datasæt, kan du måske lide denne enkle måde at få tal fra en streng i Excel på.
Med vores Ultimate Suite tilføjet til Excel-båndet kan du hurtigt hente tal fra enhver alfanumerisk streng på denne måde:
- Gå til Ablebits Data faneblad> Tekst gruppe, og klik på Uddrag :
- Vælg alle celler med kildeteksterne.
- I ruden for værktøjet Udtrække skal du vælge Udtrække numre valgknap.
- Afhængigt af om du vil have resultaterne som formler eller værdier, skal du vælge den Indsæt som formel feltet eller lad det være fravalgt (standard).
Jeg anbefaler, at du markerer dette felt, hvis du ønsker, at de udtrukne tal skal opdateres automatisk, så snart der foretages ændringer i kildetrådene. Hvis du ønsker, at resultaterne skal være uafhængige af de oprindelige strenge (f.eks. hvis du planlægger at fjerne kildedataene på et senere tidspunkt), skal du ikke markere dette felt.
- Klik på den Indsæt resultater knappen. Færdig!
Ligesom i det foregående eksempel er resultaterne af udtrækket numre , hvilket betyder, at du frit kan tælle, summere, beregne gennemsnit eller foretage andre beregninger med dem.
I dette eksempel har vi valgt at indsætte resultaterne som værdier , og tilføjelsesprogrammet gjorde præcis, hvad der blev bedt om:
Hvis den Indsæt som formel afkrydsningsfeltet var markeret, ville du observere en formel i formellinjen. Er du nysgerrig efter at vide hvilken? Download prøveversionen af Ultimate Suite og se selv :)
Tilgængelige downloads
Excel-udtræk nummer - prøvearbejdsbog (.xlsx-fil)
Ultimate Suite - prøveversion (.exe-fil)