Innholdsfortegnelse
Opplæringen viser hvordan du trekker ut tall fra ulike tekststrenger i Excel ved å bruke formler og uttrekksverktøyet.
Når det gjelder å trekke ut deler av en tekststreng med en gitt lengde , Excel har tre delstrengfunksjoner (venstre, høyre og midt) for raskt å håndtere oppgaven. Når det gjelder å trekke ut tall fra en alfanumerisk streng, gir Microsoft Excel... ingenting.
For å hente et tall fra en streng i Excel, krever det litt oppfinnsomhet, litt tålmodighet og en haug med forskjellige funksjoner hekket inn i hverandre. Eller du kan kjøre utpakkeverktøyet og få jobben gjort med et museklikk. Nedenfor finner du alle detaljer om begge metodene.
Hvordan trekke ut tall fra slutten av tekststrengen
Når du har en kolonne med alfanumeriske strenger hvor nummer kommer etter tekst, kan du bruke følgende formel for å få det.
RIGHT( celle, LEN( celle) - MAX(IF(ISNUMBER(MID( celle)>, ROW(INDIRECT("1:"&LEN( celle))), 1) *1)=USANN, ROW(INDIREKTE("1:"&LENGE( celle))), 0)))Vi vil dvele ved formelens logikk litt senere. Foreløpig erstatt celle med en referanse til cellen som inneholder den opprinnelige strengen (A2 i vårt tilfelle), og skriv inn formelen i en hvilken som helst tom celle i samme rad, si 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 formelen får tall bare fra slutten. Hvis en streng også har tall i begynnelsen eller midten, er de detignorert:
Uttrekket utføres med HØYRE-funksjonen som tilhører kategorien Tekstfunksjoner. Utdata fra denne funksjonen er alltid tekst . I vårt tilfelle er resultatet en numerisk delstreng , som i Excel også er tekst, ikke tall.
Hvis du trenger at resultatet skal være et tall (som du kan bruke i videre beregninger), pakk deretter formelen inn i VERDI-funksjonen eller utfør en aritmetisk operasjon som ikke endrer resultatet, for eksempel multipliser med 1 eller legg til 0. For å fange opp feil i strengene som ikke inneholder en enkelt tall, bruk IFERROR-funksjonen. For eksempel:
=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, "")
Merk. I Dynamic Array Excel (Office 365 og 2021) skriver du inn formelen på vanlig måte med Enter-tasten. I Excel 2019 og tidligere fungerer den bare som en matriseformel, så husk å trykke Ctrl + Shift + Enter for å fullføre den.
Slik fungerer denne formelen:
For å trekke ut tall fra en alfanumerisk streng, er det første du trenger å vite hvor du skal starte uttrekkingen. Plasseringen til det siste ikke-numeriske tegnet i en streng bestemmes ved hjelp av denne vanskelige formelen:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
For å forstå logikken, la oss undersøke den fra innsiden :
ROW(INDIRECT("1:"&LEN(A2)))-kombinasjonenoppretter en tallsekvens som tilsvarer summen av tegn i kildestrengen (A2), og vi serverer disse sekvensielle tallene til MID som startnumrene:
MID(A2, {1;2;3;4 ;5;6;7;8}, 1)
MID-funksjonen trekker hvert enkelt tegn fra A2 og returnerer dem som en matrise:
{"0";"5";" -";"E";"C";"-";"0";"1"}
Siden MID er en tekstfunksjon, er utdata alltid tekst (som du kan merke, alle tegnene er omgitt av anførselstegn). For å gjøre numeriske enere til tall, multipliserer vi matrisen med 1 (dobbel negasjon --MID() vil ha samme effekt). Resultatet av denne operasjonen er en rekke tall og #VERDI! feil som representerer ikke-numeriske tegn:
ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})
ISNUMBER-funksjonen evaluerer hvert element i matrisen og gir sin vurdering i form av boolske verdier - TRUE for tall, FALSE for noe annet:
{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}
Denne matrisen går til den logiske testen av IF-funksjonen, der hvert element i matrisen sammenlignes med FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
For hver FALSE (ikke-numerisk verdi), returnerer en annen ROW(INDIRECT())-funksjon dens relative plassering i strengen. For hver TRUE (numerisk verdi) returneres en null. Den resulterende matrisen ser ut somfølger:
{0;0;3;4;5;6;0;0}
Resten er lett. MAX-funksjonen finner det høyeste tallet i matrisen ovenfor, som er posisjonen til den siste ikke-numeriske verdien i strengen (6 i vårt tilfelle). Trekk ganske enkelt denne posisjonen fra den totale lengden på strengen returnert av LEN, og send resultatet til HØYRE for å la det vite hvor mange tegn som skal trekkes ut fra høyre side av strengen:
HØYRE(A2, LEN (A2) - 6)
Ferdig!
Hvordan trekke ut tall fra begynnelsen av tekststrengen
Hvis du jobber med poster der tekst står etter nummer, kan du trekk ut nummer fra starten av en streng ved å bruke denne generiske formelen:
LEFT( celle, MATCH(FALSE, ISNUMBER(MID( celle, ROW(INDIRECT("1: "&LEN( celle)+1)), 1) *1), 0) -1)Med den opprinnelige strengen i A2, bruk følgende formel for å få tall:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
Uansett hvor mange sifre som er i midten eller slutten, er det kun startnummeret som trekkes ut:
Merk. I Excel 365 og Excel 2021, på grunn av støtte for dynamiske matriser, fungerer en vanlig formel fint. I Excel 2019 og tidligere, bør du trykke Ctrl + Shift + Enter for å eksplisitt gjøre det til en matriseformel .
Slik fungerer denne formelen:
Her bruker vi igjen kombinasjonen av ROW, INDIRECT og LEN funksjoner for å lage en tallsekvens som er lik summen av tegn i kildestrengen pluss 1 (rollen til dettilleggstegn vil bli tydelig litt senere).
ROW(INDIRECT("1:"&LEN(A2)+1))
MIDDEL og ISNUMMER gjør samme jobb som i forrige eksempel - MID trekker individuelle tegn og ISNUMBER konverterer dem til de logiske verdiene. Den resulterende matrisen av TRUE's og FALSE's går til MATCH-funksjonen som en oppslagsmatrise:
MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH beregner en relativ posisjon til den første FALSE, og gir oss posisjonen til det første ikke-numeriske tegnet i strengen (3 i A2). For å trekke ut de foregående tallene, trekker vi 1 fra posisjonen det første teksttegnet og tjener forskjellen til antall_tegn argumentet til VENSTRE-funksjonen:
LEFT(A2, 3-1)
Nå, tilbake til et "ekstra" tegn i sekvensen generert av ROW(INDIRECT()+1)). Som du allerede vet, gir denne sekvensen startpunktene for MID-funksjonen. Uten +1 ville MID trekke ut nøyaktig like mange tegn som det er i den originale strengen. Hvis strengen bare inneholder tall, vil ISNUMBER bare returnere TRUE mens MATCH trenger minst én FALSE. For å sikre det, legger vi til ett tegn til i den totale lengden på strengen, som MID-funksjonen ville konvertere til en tom streng. For eksempel, i B7, returnerer MID denne matrisen:
{"1";"2";"3";"4";""}
Merk. Som tilfellet er med HØYRE-funksjonen, returnerer VENSTRE også en numeriskunderstreng , som teknisk sett er tekst, ikke nummer. For å få resultatet som et tall i stedet for en numerisk streng, nester du formelen i VERDI-funksjonen eller multipliserer resultatet med 1 som vist i det første eksemplet.
Hvordan få tall fra en hvilken som helst posisjon i en streng
Hvis oppgaven din innebærer å trekke ut tall fra hvor som helst i en streng, kan du bruke følgende forbløffende formel publisert 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)
Hvor A2 er original tekststreng.
Å bryte ned denne formelen vil kreve en egen artikkel, så du kan ganske enkelt kopiere den til regnearket ditt for å være sikker på at det virkelig fungerer :)
Når du undersøker resultatene, kan du imidlertid legge merke til en ubetydelig ulempe - hvis kildestrengen ikke inneholder et tall, returnerer formelen null, som i rad 6 i skjermbildet ovenfor. For å fikse dette kan du pakke inn formelen i IF-setningen, den logiske testen kontrollerer om kildestrengen inneholder et tall. Hvis den gjør det, trekker formelen ut tallet, ellers returnerer en tom streng:
=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 vist på skjermbildet nedenfor, fungerer den forbedrede formelen vakkert (kudos til Alex, vår Excel-guru, for denne forbedringen):
I motsetning til i alle tidligere eksempler, er resultatet av denne formelen tall . For å være sikker på dette, legg bare merke til de høyrejusterte verdiene i kolonne B og avkortede innledende nuller.
Tips. I Excel 365 -Excel 2019, det er en mye enklere løsning ved hjelp av TEXTJOIN-funksjonen. Se hvordan du fjerner tekst og beholder tall.
Trekk ut tall fra tekststreng med Ultimate Suite
Som du nettopp har sett, er det ingen triviell Excel-formel for å trekke tall fra en tekststreng. Hvis du har problemer med å forstå formlene eller justere dem for datasettene dine, vil du kanskje like denne enkle måten å hente tall fra streng i Excel.
Med vår Ultimate Suite lagt til Excel-båndet ditt, er dette hvordan du kan raskt hente tall fra en hvilken som helst alfanumerisk streng:
- Gå til Ablebits Data -fanen > Tekst -gruppen, og klikk på Extract :
- Velg alle cellene med kildestrengene.
- I uttrekksverktøyets rute velger du Tek ut tall alternativknappen.
- Avhengig av om du vil at resultatene skal være formler eller verdier, velg Sett inn som formel -boksen eller la den være umerket (standard).
Mitt råd er å velge denne boksen hvis du vil at de utpakkede tallene skal oppdateres automatisk så snart det er gjort endringer i kildestrengene. Hvis du vil at resultatene skal være uavhengige av de originale strengene (f.eks. hvis du planlegger å fjerne kildedataene på et senere tidspunkt), må du ikke velge denne boksen.
- Klikk Sett inn resultater -knappen. Ferdig!
Som i forrige eksempel, resultatene avuttrekk er tall , noe som betyr at du står fritt til å telle, summere, gjennomsnitt eller utføre andre beregninger med dem.
I dette eksempelet har vi valgt å sette inn resultatene som verdier , og tillegget gjorde akkurat det som ble bedt om:
Hvis avmerkingsboksen Sett inn som formel ble valgt, d observere en formel i formellinjen. Nysgjerrig på å vite hvilken? Bare last ned Ultimate Suites prøveversjon og se selv :)
Tilgjengelige nedlastinger
Excel Extract Number - eksempelarbeidsbok (.xlsx-fil)
Ultimate Suite - prøveversjon (.exe fil)