Com eliminar text o números de la cel·la d'Excel

  • Comparteix Això
Michael Brown

Aquest tutorial us ensenyarà com separar el text dels números a Excel mitjançant fórmules natives i funcions personalitzades. També aprendràs a dividir el text i els números en dues columnes separades.

Imagina't això: rebràs dades en brut per a l'anàlisi i descobreix que els números es barregen amb el text en una columna. En la majoria de les situacions, sens dubte serà més convenient tenir-les en columnes separades per a un examen més detallat.

En cas que treballeu amb dades homogènies, probablement podríeu utilitzar les funcions ESQUERRA, DRET i MITJANA per extreure el mateix nombre de caràcters des de la mateixa posició. Però aquest és un escenari ideal per a proves de laboratori. A la vida real, és més probable que tracteu dades diferents on els números van abans del text, després del text o entre el text. Els exemples següents proporcionen solucions exactament per a aquest cas.

    Com eliminar el text i mantenir els números a les cel·les d'Excel

    La solució funciona a Excel 365, Excel 2021 i Excel 2019

    Microsoft Excel 2019 va introduir algunes funcions noves que no estan disponibles en versions anteriors, i farem servir una d'aquestes funcions, és a dir, TEXTJOIN, per eliminar caràcters de text d'una cel·la. que conté nombres.

    La fórmula genèrica és:

    TEXTJOIN("", TRUE, IFERROR(MID( cel·la, ROW(INDIRECT( "1:"&LEN(<1):>cel·la))), 1) *1, ""))

    A Excel 365 i 2021, aquest també funcionarà:

    TEXTJOIN("", TRUE,IFERROR(MID( cel·la, SEQUENCE(LEN( cel·la)), 1) *1, ""))

    A primera vista, les fórmules poden semblar una mica intimidants, però funcionen :)

    Per exemple, per eliminar el text dels números a A2, introduïu una de les fórmules següents a B2 i després copieu-la a tantes cel·les com sigui necessari.

    A Excel 365 - 2019:

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

    A Excel 2019, s'ha d'introduir com a fórmula de matriu amb Ctrl + Maj + Retorn . A l'Excel de matriu dinàmica, funciona com una fórmula normal completada amb la tecla Enter.

    A Excel 365 i 2021:

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

    Com a resultat, tots els caràcters de text són s'eliminen d'una cel·la i es conserven els números:

    Com funciona aquesta fórmula:

    Per entendre millor la lògica, comencem a investigar la fórmula des de dins:

    Utilitzeu ROW(INDIRECT("1:"&LEN(cadena))) o SEQUENCE(LEN(cadena)) per crear una seqüència de números corresponents al nombre total de caràcters a la cadena d'origen i, a continuació, introduïu aquests números seqüencials a la funció MID com a números inicials. A B2, aquesta part de la fórmula té l'aspecte següent:

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

    La funció MID extreu cada caràcter de A2 començant pel primer i els retorna com a matriu:

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

    Aquesta matriu es multiplica per 1. Els valors numèrics sobreviuen sense canvis, mentre que la multiplicació d'un caràcter no numèric dóna com a resultat un #VALOR! error:

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

    La funció IFERROR gestionaaquests errors i els substitueix per cadenes buides:

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

    Aquesta matriu final es serveix a la funció TEXTJOIN, que concatena els valors no buits de la matriu ( ignore_empty argument definit en TRUE) utilitzant una cadena buida ("") per al delimitador:

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

    Consell. Per a Excel 2016 - 2007, també existeix una solució, però la fórmula és molt més complexa. El podeu trobar en aquest tutorial: Com extreure números a Excel.

    Funció personalitzada per eliminar el text dels números

    La solució funciona per a totes les versions d'Excel

    Si utilitzeu una versió anterior d'Excel o també trobeu les fórmules anteriors difícil de recordar, res no us impedeix crear la vostra pròpia funció amb una sintaxi més senzilla i un nom fàcil d'utilitzar com ara RemoveText . La funció definida per l'usuari (UDF) es pot escriure de dues maneres:

    Codi VBA 1:

    Aquí, observem cada caràcter de la cadena d'origen un per un i comproveu si és numèric o no. Si és un nombre, el caràcter s'afegeix a la cadena resultant.

    Funció RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i , 1)) Aleshores sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End Function

    Codi VBA 2:

    El codi crea un objecte per processar una expressió regular. Amb RegExp, eliminem tots els caràcters que no siguin els dígits 0-9 de la cadena d'origen.

    Funció RemoveText(str Com String ) As String Amb CreateObject ( "VBScript.RegExp") .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Finalitzar amb End Function

    En fulls de treball petits, ambdós codis funcionaran igual de bé. En fulls de treball grans on la funció s'anomena centenars o milers de vegades, el codi 2 que utilitza VBScript.RegExp funcionarà més ràpidament.

    Els passos detallats per inserir el codi al vostre llibre de treball es poden trobar aquí: Com inserir VBA codi a Excel.

    Sigui quin sigui l'enfocament que trieu, des de la perspectiva de l'usuari final, la funció per esborrar text i deixar números és tan senzilla com aquesta:

    RemoveText(string)

    Per exemple, per elimineu caràcters no numèrics de la cel·la A2, la fórmula de B2 és:

    =RemoveText(A2)

    Copieu-la a la columna i obtindreu aquest resultat:

    Nota. Tant les fórmules natives com la funció personalitzada generen una cadena numèrica . Per convertir-lo en un nombre, multipliqueu el resultat per 1, sumeu zero o embolcalleu la fórmula a la funció VALOR. Per exemple:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    Com eliminar números de la cadena de text a Excel

    La solució funciona a Excel 365, Excel 2021 i Excel 2019

    Les fórmules per eliminar números d'una cadena alfanumèrica són molt semblants a les que s'han comentat a l'exemple anterior.

    Per a Excel 365 - 2019:

    TEXTJOIN(" ", TRUE, SI(ISERR(MID( cel·la , FILA(INDIRECT("1:"&LEN( cel·la ) )), 1) *1), MID( cel·la , FILA(INDIRECT("1:"&LEN( ) cel·la ))), 1), ""))

    A Excel 2019, recordeu que heu de convertir-la en fórmula de matriu prement les tecles Ctrl + Maj + Enter alhora.

    Per a Excel 365 i 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( cel·la , SEQUENCE(LEN( cel·la 1)) *1), MID ( cel·la , SEQUENCE(LEN( cel·la )), 1), ""))

    Per exemple, per eliminar números d'una cadena en A2, la fórmula és:

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

    O

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

    Com a resultat, tots els números s'eliminen d'una cel·la i es conserven els caràcters de text:

    Com es mostra a la captura de pantalla anterior, la fórmula elimina els caràcters numèrics de qualsevol posició d'una cadena: al principi, al final i al mig. Tanmateix, hi ha una advertència: si una cadena comença amb un número seguit d'un espai , aquest espai es manté, la qual cosa genera un problema d'espais inicials (com a B2).

    Per eliminar els espais addicionals abans del text , embolcalla la fórmula a la funció TRIM com aquesta:

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

    Ara, els teus resultats són absolutament perfectes!

    Com funciona aquesta fórmula:

    En essència, la fórmula funciona igual que s'explica a l'exemple anterior. La diferència és que, des de la matriu final servida fins a la funció TEXTJOIN, cal eliminar números, no text. Per fer-ho, utilitzem la combinació de funcions SI i ISERROR.

    Com recordeu,MID(…)+0 genera una matriu de números i #VALOR! errors que representen caràcters de text a les mateixes posicions:

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

    La funció ISERROR detecta els errors i passa la matriu resultant de valors booleans a IF:

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

    Quan la funció SI veu TRUE (un error), insereix el caràcter de text corresponent a la matriu processada amb l'ajuda d'una altra funció MID. Quan la funció SI veu FALSE (un número), la substitueix per una cadena buida:

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

    Aquesta matriu final es passa a TEXTJOIN, de manera que concatena els caràcters de text i genera el resultat.

    Funció personalitzada per eliminar números del text

    La solució funciona per a totes les versions d'Excel

    Tenint en compte que s'ha de mantenir una fórmula robusta senzill, compartiré el codi de la funció definida per l'usuari (UDF) per eliminar qualsevol caràcter numèric.

    Codi VBA 1:

    Funció RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Aleshores sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End Function

    Codi 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

    Com és el cas de la funció RemoveText, és millor utilitzar el segon codi en granfulls de treball per optimitzar el rendiment.

    Un cop afegit el codi al vostre llibre de treball, podeu eliminar tots els caràcters numèrics d'una cel·la mitjançant aquesta funció personalitzada:

    RemoveNumbers(string)

    En el nostre cas, el La fórmula a B2 és:

    =RemoveNumbers(A2)

    Per retallar els espais inicials si n'hi ha, niu la funció personalitzada dins de TRIM com ho faríeu amb una fórmula nativa:

    =TRIM(RemoveNumbers(A2))

    Dividiu els números i el text en columnes separades

    En una situació en què voleu separar el text i els números en dues columnes, estaria bé que la feina es fes amb una sola fórmula , acordar? Per a això, només fusionem el codi de les funcions RemoveText i RemoveNumbers en una funció, anomenada SplitTextNumbers , o simplement Split , o el que vulguis :)

    Codi VBA 1:

    Funció SplitTextNumbers(str Com 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) Aleshores sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End Funció

    Codi VBA 2:

    Funció SplitTextNumbers(str As String , is_remove_text As String) Amb CreateObject ("VBScript.RegExp") .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Si no.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function

    La nostra nova funció personalitzada requereix dos arguments:

    SplitTextNumbers(string, is_remove_text)

    On is_remove_text és un valor booleà que indica quins caràcters cal eliminar:

    • VERTADER o 1: elimina el text i mantén els números
    • FALSE o 0: elimina els números i conserva el text

    Per al nostre conjunt de dades de mostra, les fórmules prenen aquesta forma:

    Per eliminar caràcters no numèrics:

    =SplitTextNumbers(A2, TRUE)

    Per suprimir caràcters numèrics :

    =SplitTextNumbers(A2, FALSE)

    Consell. Per evitar un possible problema d'espais inicials, recomano embolicar sempre la fórmula que elimina números a la funció TRIM:

    =TRIM(SplitTextNumbers(A2, FALSE))

    Eina especial per eliminar números o text

    Per a aquells que ho fan No m'agrada complicar les coses innecessàriament, mostraré la nostra manera d'eliminar text o números a Excel.

    Suposant que la nostra Ultimate Suite s'afegeix a la vostra cinta d'Excel, això és el que feu:

    1. A la pestanya Dades d'Ablebits , al grup Text , feu clic a Elimina > Elimina caràcters .

  • Al panell del complement, seleccioneu l'interval d'origen, trieu l'opció Elimina els jocs de caràcters i trieu Text caràcters o Caràcters numèrics a la llista desplegable.
  • Premeu Elimina i gaudiu del resultat :)
  • Consell. Si els resultats contenen alguns espais inicials, els espais de retallal'eina els eliminarà en molt poc temps.

    Així és com eliminar text o caràcters numèrics d'una cadena a Excel. Us agraeixo la lectura i espero veure-us al nostre blog la setmana vinent!

    Descàrregues disponibles

    Elimineu text o números a Excel - exemples (fitxer .xlsm)

    Ultimate Suite: versió de prova (fitxer .exe)

    Michael Brown és un entusiasta de la tecnologia dedicat amb una passió per simplificar processos complexos mitjançant eines de programari. Amb més d'una dècada d'experiència en la indústria tecnològica, ha perfeccionat les seves habilitats en Microsoft Excel i Outlook, així com en Google Sheets i Docs. El bloc de Michael es dedica a compartir els seus coneixements i experiència amb altres persones, oferint consells i tutorials fàcils de seguir per millorar la productivitat i l'eficiència. Tant si sou un professional experimentat com si sou un principiant, el bloc de Michael ofereix valuoses idees i consells pràctics per treure el màxim profit d'aquestes eines de programari essencials.