Cum să eliminați textul sau numerele din celula Excel

  • Imparte Asta
Michael Brown

Acest tutorial vă va învăța cum să separați textul de numere în Excel prin utilizarea formulelor native și a funcțiilor personalizate. De asemenea, veți învăța cum să separați textul și numerele în două coloane separate.

Imaginați-vă: primiți date brute pentru analiză și descoperiți că numerele sunt amestecate cu textul într-o coloană. În majoritatea situațiilor, va fi cu siguranță mai convenabil să le aveți în coloane separate pentru o examinare mai atentă.

În cazul în care lucrați cu date omogene, probabil că ați putea folosi funcțiile LEFT, RIGHT și MID pentru a extrage același număr de caractere din aceeași poziție. Dar acesta este un scenariu ideal pentru testele de laborator. În viața reală, cel mai probabil veți avea de-a face cu date diferite, în care numerele vin înainte de text, după text sau între texte. Exemplele de mai jos oferă soluții exact pentru acest lucrucaz.

    Cum să eliminați textul și să păstrați numerele în celulele Excel

    Soluția funcționează în Excel 365, Excel 2021 și Excel 2019.

    Microsoft Excel 2019 a introdus câteva funcții noi care nu sunt disponibile în versiunile anterioare, iar noi vom utiliza una dintre aceste funcții, și anume TEXTJOIN, pentru a elimina caracterele de text dintr-o celulă care conține numere.

    Formula generică este:

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

    În Excel 365 și 2021, aceasta va funcționa și în Excel 365 și 2021:

    TEXTJOIN("", TRUE, IFERROR(MID( celulă , SECVENȚĂ(LEN( celulă )), 1) *1, ""))

    La prima vedere, formulele pot părea un pic intimidante, dar funcționează :)

    De exemplu, pentru a elimina textul din numerele din A2, introduceți una dintre formulele de mai jos în B2, apoi copiați-o în câte celule este necesar.

    În Excel 365 - 2019:

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

    În Excel 2019, trebuie introdusă ca o formulă de matrice cu Ctrl + Shift + Enter . În Excel cu matrice dinamică, funcționează ca o formulă normală completată cu tasta Enter.

    În Excel 365 și 2021:

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

    Ca rezultat, toate caracterele de text sunt eliminate dintr-o celulă, iar numerele sunt păstrate:

    Cum funcționează această formulă:

    Pentru a înțelege mai bine logica, să începem să investigăm formula din interior:

    Folosiți fie ROW(INDIRECT("1:"&LEN(string))), fie SEQUENCE(LEN(string)) pentru a crea o secvență de numere corespunzătoare numărului total de caractere din șirul sursă, iar apoi introduceți aceste numere secvențiale în funcția MID ca numere de pornire. În B2, această parte a formulei arată după cum urmează:

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

    Funcția MID extrage fiecare caracter din A2 începând cu primul caracter și îl returnează sub formă de matrice:

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

    Această matrice este înmulțită cu 1. Valorile numerice supraviețuiesc fără nicio modificare, în timp ce înmulțirea unui caracter nenumeric duce la o eroare #VALUE!

    {2;1;0;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!}

    Funcția IFERROR gestionează aceste erori și le înlocuiește cu șiruri de caractere goale:

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

    Acest tablou final este servit funcției TEXTJOIN, care concatenează valorile nevide din tablou ( ignore_empty setat la TRUE) folosind un șir de caractere gol ("") ca delimitator:

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

    Sfat. Pentru Excel 2016 - 2007, există și o soluție, dar formula este mult mai complexă. O puteți găsi în acest tutorial: Cum să extragi numere în Excel.

    Funcție personalizată pentru a elimina textul din numere

    Soluția funcționează pentru toate versiunile Excel

    Dacă folosiți o versiune mai veche de Excel sau considerați că formulele de mai sus sunt prea greu de reținut, nimic nu vă împiedică să vă creați propria funcție cu o sintaxă mai simplă și un nume ușor de utilizat, cum ar fi RemoveText Funcția definită de utilizator (UDF) poate fi scrisă în două moduri:

    Cod VBA 1:

    Aici, ne uităm la fiecare caracter din șirul sursă unul câte unul și verificăm dacă este numeric sau nu. Dacă este un număr, caracterul este adăugat la șirul rezultat.

    Function 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

    Cod VBA 2:

    Codul creează un obiect pentru a procesa o expresie regulată. Folosind RegExp, eliminăm toate caracterele, altele decât cifrele 0-9, din șirul sursă.

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

    Pe foi de calcul mici, ambele coduri vor funcționa la fel de bine. Pe foi de calcul mari, unde funcția este apelată de sute sau mii de ori, codul 2 care utilizează VBScript.RegExp va funcționa mai rapid.

    Pașii detaliați pentru a insera codul în registrul de lucru pot fi găsiți aici: Cum să inserați cod VBA în Excel.

    Oricare ar fi abordarea aleasă, din perspectiva utilizatorului final, funcția de ștergere a textului și de lăsare a numerelor este la fel de simplă ca aceasta:

    RemoveText(string)

    De exemplu, pentru a elimina caracterele nenumerice din celula A2, formula din B2 este:

    =RemoveText(A2)

    Copiați-o pe coloană și veți obține acest rezultat:

    Notă. Atât formulele native, cât și funcția personalizată generează un șir numeric Pentru a o transforma într-un număr, înmulțiți rezultatul cu 1, adăugați zero sau includeți formula în funcția VALUE. De exemplu:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    Cum să eliminați numerele din șirul de text în Excel

    Soluția funcționează în Excel 365, Excel 2021 și Excel 2019.

    Formulele de eliminare a numerelor dintr-un șir alfanumeric sunt destul de asemănătoare cu cele discutate în exemplul anterior.

    Pentru Excel 365 - 2019:

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

    În Excel 2019, nu uitați să faceți din aceasta o formula matricei prin apăsarea simultană a tastelor Ctrl + Shift + Enter.

    Pentru Excel 365 și 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( celulă , SECVENȚĂ(LEN( celulă 1) *1), MID( celulă , SECVENȚĂ(LEN( celulă )), 1), ""))

    De exemplu, pentru a elimina numerele dintr-un șir de caractere din A2, formula este:

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

    Sau

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

    Ca rezultat, toate numerele sunt eliminate dintr-o celulă și se păstrează caracterele text:

    După cum se arată în captura de ecran de mai sus, formula elimină caracterele numerice din orice poziție a unui șir: la început, la sfârșit și la mijloc. Cu toate acestea, există un avertisment: dacă un șir începe cu un număr urmat de un spațiu , acest spațiu este păstrat, ceea ce produce o problemă de spații în față (ca în B2).

    Pentru a scăpa de surplusul de spații înainte de text , înfășurați formula în funcția TRIM astfel:

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

    Acum, rezultatele tale sunt absolut perfecte!

    Cum funcționează această formulă:

    În esență, formula funcționează la fel ca cea explicată în exemplul anterior. Diferența este că, din matricea finală servită funcției TEXTJOIN, trebuie să eliminați numerele, nu textul. Pentru a face acest lucru, folosim combinația de funcții IF și ISERROR.

    După cum vă amintiți, MID(...)+0 generează o matrice de numere și erori #VALUE! reprezentând caractere de text în aceleași poziții:

    {2;1;0;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!}

    Funcția ISERROR detectează erorile și transmite matricea de valori booleene rezultată către IF:

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

    Atunci când funcția IF vede TRUE (o eroare), introduce caracterul de text corespunzător în matricea procesată cu ajutorul unei alte funcții MID. Atunci când funcția IF vede FALSE (un număr), îl înlocuiește cu un șir de caractere gol:

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

    Această matrice finală este transmisă către TEXTJOIN, astfel încât acesta concatenează caracterele textului și emite rezultatul.

    Funcție personalizată pentru a elimina numerele din text

    Soluția funcționează pentru toate versiunile Excel

    Ținând cont de faptul că o formulă robustă trebuie să fie simplă, voi împărtăși codul funcției definite de utilizator (UDF) pentru a elimina orice caracter numeric.

    Cod VBA 1:

    Function 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

    Cod VBA 2:

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

    Ca și în cazul funcției RemoveText, cel de-al doilea cod este mai bine să fie utilizat în foi de calcul mari pentru a optimiza performanța.

    Odată ce codul este adăugat în registrul de lucru, puteți elimina toate caracterele numerice dintr-o celulă utilizând această funcție personalizată:

    RemoveNumbers(string)

    În cazul nostru, formula din B2 este:

    =RemoveNumbers(A2)

    Pentru a tăia spațiile de început, dacă este cazul, introduceți funcția personalizată în TRIM, așa cum ați face cu o formulă nativă:

    =TRIM(RemoveNumbers(A2))

    Împărțiți numerele și textul în coloane separate

    În situația în care doriți să separați textul și numerele în două coloane, ar fi frumos să faceți treaba asta cu o singură formulă, nu-i așa? Pentru aceasta, trebuie doar să fuzionăm codul de la RemoveText și RemoveNumbers într-o singură funcție, numită SplitTextNumbers , sau pur și simplu Split , sau orice doriți :)

    Cod VBA 1:

    Function 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 If i If True = is_remove_text Then SplitTextNumbers = sNum = sNum Else SplitTextNumbers = sText End If End If EndFuncția

    Cod VBA 2:

    Function 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 With End Function

    Noua noastră funcție personalizată are nevoie de două argumente:

    SplitTextNumbers(string, is_remove_text)

    Unde is_remove_text este o valoare booleană care indică ce caractere trebuie eliminate:

    • TRUE sau 1 - elimină textul și păstrează numerele
    • FALSE sau 0 - elimină numerele și păstrează textul

    Pentru eșantionul nostru de date, formulele au următoarea formă:

    Pentru a elimina caracterele nenumerice:

    =SplitTextNumbers(A2, TRUE)

    Pentru a șterge caracterele numerice:

    =SplitTextNumbers(A2, FALSE)

    Sfat: Pentru a evita o potențială problemă legată de spațiile de început, vă recomand să înfășurați întotdeauna formula care elimină numere în funcția TRIM:

    =TRIM(SplitTextNumbers(A2, FALSE))

    Instrument special pentru a elimina numere sau text

    Pentru cei cărora nu le place să complice inutil lucrurile, voi arăta propriul nostru mod de a elimina text sau numere în Excel.

    Presupunând că suita noastră Ultimate Suite este adăugată la panglica Excel, iată ce trebuie să faceți:

    1. Pe Date Ablebits în fila Text grup, faceți clic pe Eliminați > Eliminați caracterele .

  • În panoul add-in-ului, selectați intervalul sursă, alegeți opțiunea Eliminarea seturilor de caractere și alegeți fie Text caractere sau Numeric caractere în lista derulantă.
  • Hit Eliminați și bucurați-vă de rezultat :)
  • Sfat: Dacă rezultatele conțin câteva spații de început, instrumentul Trim Spaces le va elimina imediat.

    Iată cum se elimină caracterele text sau numerice dintr-un șir de caractere în Excel. Vă mulțumesc pentru lectură și vă aștept pe blogul nostru săptămâna viitoare!

    Descărcări disponibile

    Eliminarea textului sau a numerelor în Excel - exemple (fișier .xlsm)

    Ultimate Suite - versiunea de încercare (fișier .exe)

    Michael Brown este un pasionat de tehnologie dedicat, cu o pasiune pentru simplificarea proceselor complexe folosind instrumente software. Cu mai mult de un deceniu de experiență în industria tehnologiei, el și-a perfecționat abilitățile în Microsoft Excel și Outlook, precum și în Google Sheets și Docs. Blogul lui Michael este dedicat împărtășirii cunoștințelor și experienței sale cu alții, oferind sfaturi și tutoriale ușor de urmat pentru îmbunătățirea productivității și eficienței. Indiferent dacă sunteți un profesionist experimentat sau un începător, blogul lui Michael oferă informații valoroase și sfaturi practice pentru a profita la maximum de aceste instrumente software esențiale.