Excel-formel: Ta bort numeriska tecken från cellen -

Innehållsförteckning

Generisk formel

(=TEXTJOIN("",TRUE,IF(ISERR(MID(A1,ROW(INDIRECT("1:100")),1)+0),MID(A1,ROW(INDIRECT("1:100")),1),"")))

Sammanfattning

För att ta bort numeriska tecken från en textsträng kan du använda en formel baserad på TEXTJOIN-funktionen. I exemplet som visas är formeln i C5:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Obs: detta är en matrisformel och måste anges med kontroll + shift + enter, utom i Excel 365.

Förklaring

Excel har inget sätt att kasta bokstäverna i en textsträng till en matris direkt i en formel. Som en lösning använder denna formel MID-funktionen med hjälp av ROW- och INDIRECT-funktionerna för att uppnå samma resultat. Formeln i C5, kopierad ner, är:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,ROW(INDIRECT("1:100")),1)+0),MID(B5,ROW(INDIRECT("1:100")),1),""))

Detta ser ganska komplicerat ut men kärnan är att vi skapar en matris med alla tecken i B5 och testar varje tecken för att se om det är ett nummer. I så fall kasserar vi värdet och ersätter det med en tom sträng (""). Om inte, lägger vi till det icke-numeriska tecknet i en "bearbetad" matris. Slutligen använder vi TEXTJOIN-funktionen (ny i Excel 2019) för att sammanfoga alla tecken tillsammans och ignorera tomma värden.

MID-funktionen arbetar inifrån och ut för att extrahera texten i B5, ett tecken i taget. Nyckeln är ROW och INDIRECT kodavsnittet här:

ROW(INDIRECT("1:100"))

som snurrar upp en matris som innehåller 100 nummer så här:

(1,2,3,4,5,6,7,8… .99,100)

Obs: 100 representerar maximalt antal tecken som ska bearbetas. Ändra för att passa dina data, eller använd LEN-funktionen enligt nedan.

Denna matris går in i MID-funktionen som start_num argument. För num_chars använder vi 1.

MID-funktionen returnerar en matris så här:

("3";"4";"6";"5";"3";" ";"J";"i";"m";" ";"M";"c";"D";"o";"n";"a";"l";"d";"";"";"";… )

Obs: extra objekt i matrisen har tagits bort för läsbarhet.

Till den här matrisen lägger vi till noll. Detta är ett enkelt knep som tvingar Excel att tvinga text till ett nummer. Numeriska textvärden som "1", "2", "3", "4" etc. konverteras utan fel, men icke-numeriska värden misslyckas och ger ett #VALUE-fel. Vi använder IF-funktionen med ISERR-funktionen för att fånga upp dessa fel. När vi ser ett fel vet vi att vi har ett icke-numeriskt tecken, så vi tar med det tecknet i den bearbetade matrisen med en annan MID-funktion:

MID(B5,ROW(INDIRECT("1:100")),1)

Om du inte får något fel vet vi att vi har ett nummer, så vi sätter in en tom sträng ("") i matrisen istället för numret.

Det slutliga matrisresultatet går in i TEXTJOIN-funktionen som text1-argumentet. För avgränsning använder vi en tom sträng ("") och för ignore_empty levererar vi SANT. TEXTJOIN sammanfogar sedan alla icke-tomma värden i matrisen och returnerar resultatet.

Exakt matrislängd

Istället för att hårdkoda ett nummer som 100 i INDIRECT kan du använda LEN-funktionen för att bygga en matris med det faktiska antalet tecken i cellen så här:

MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)

LEN returnerar antalet tecken i cellen som ett tal, som används istället för 100. Detta gör att formeln kan skala upp till valfritt antal tecken automatiskt.

Ta bort extra utrymme

När du tar bort numeriska tecken kan du ha extra mellanslagstecken kvar. För att ta bort ledande och efterföljande mellanslag och normalisera mellanslag mellan ord kan du slå in formeln som visas på den här sidan i TRIM-funktionen:

=TRIM(formula)

Med SEKVENS

I Excel 365 kan den nya SEKVENSFunktionen ersätta ROW + INDIRECT-koden ovan:

=TEXTJOIN("",TRUE,IF(ISERR(MID(B5,SEQUENCE(LEN(B5)),1)+0),MID(B5,SEQUENCE(LEN(B5)),1),""))

Här använder vi SEQUENCE + LEN för att bygga en matris med rätt längd i ett steg.

Med LET

Vi kan ytterligare effektivisera denna formel med LET-funktionen. Eftersom arrayen skapas två gånger ovan med SEQUENCE och LEN kan vi definiera array som en variabel och skapa den bara en gång:

=LET(array,SEQUENCE(LEN(B5)),TEXTJOIN("",TRUE,IF(ISERR(MID(B5,array,1)+0),MID(B5,array,1),"")))

Här ställs värdet för arrayen in en gång och används sedan två gånger i MID-funktionen.

Intressanta artiklar...