Táboa de contidos
Este titorial ensinarache como separar texto dos números en Excel usando fórmulas nativas e funcións personalizadas. Tamén aprenderás a dividir o texto e os números en dúas columnas separadas.
Imaxina isto: recibes datos brutos para a análise e descobres que os números se mesturan con texto nunha columna. Na maioría das situacións, seguramente será máis conveniente telos en columnas separadas para un exame máis detallado.
No caso de que esteas a traballar con datos homoxéneos, probablemente podes usar as funcións ESQUERDA, DEREITA e MEDIA para extraer os datos. mesmo número de caracteres da mesma posición. Pero ese é un escenario ideal para probas de laboratorio. Na vida real, é máis probable que trates con datos diferentes onde os números van antes do texto, despois do texto ou entre o texto. Os exemplos seguintes proporcionan solucións exactamente para este caso.
Como eliminar texto e manter os números nas celas de Excel
A solución funciona en Excel 365, Excel 2021 , e Excel 2019
Microsoft Excel 2019 introduciu algunhas funcións novas que non están dispoñibles nas versións anteriores, e imos utilizar unha destas funcións, a saber, TEXTJOIN, para eliminar os caracteres de texto dunha cela. que contén números.
A fórmula xenérica é:
TEXTJOIN("", TRUE, IFERROR(MID( celda, ROW(INDIRECT( "1:"&LEN(<1)>celda))), 1) *1, ""))En Excel 365 e 2021, este tamén funcionará:
TEXTJOIN("", TRUE,IFERROR(MID( celda, SEQUENCE(LEN( celda)), 1) *1, ""))A primeira vista, as fórmulas poden parecer un pouco intimidantes, pero funcionan :)
Por exemplo, para eliminar texto dos números en A2, introduza unha das fórmulas seguintes en B2 e, a continuación, cópiea a tantas celas como sexa necesario.
En Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
En Excel 2019, debe introducirse como unha fórmula matricial con Ctrl + Maiús + Intro . Na matriz dinámica Excel, funciona como unha fórmula normal completada coa tecla Intro.
En Excel 365 e 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Como resultado, todos os caracteres de texto son eliminado dunha cela e gárdanse os números:
Como funciona esta fórmula:
Para comprender mellor a lóxica, empecemos a investigar a fórmula desde dentro:
Utiliza ROW(INDIRECT("1:"&LEN(cadea))) ou SEQUENCE(LEN(cadea)) para crear unha secuencia de números correspondentes ao número total de caracteres na cadea de orixe e, a continuación, alimenta eses números secuenciais á función MID como números de inicio. En B2, esta parte da fórmula ten o seguinte aspecto:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
A función MID extrae cada carácter de A2 comezando polo primeiro e devólveos como unha matriz:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Esta matriz multiplícase por 1. Os valores numéricos sobreviven sen cambios, mentres que a multiplicación dun carácter non numérico dá como resultado un #VALOR! erro:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
A función IFERROR xestionaestes erros e substitúeos por cadeas baleiras:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Esta matriz final serve para a función TEXTJOIN, que concatena os valores non baleiros da matriz ( ignore_empty argumento definido como TRUE) usando unha cadea baleira ("") para o delimitador:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Consello. Para Excel 2016 - 2007, tamén existe unha solución, pero a fórmula é moito máis complexa. Podes atopalo neste tutorial: Como extraer números en Excel.
Función personalizada para eliminar texto dos números
A solución funciona para todas as versións de Excel
Se estás a usar unha versión antiga de Excel ou tamén atopas as fórmulas anteriores difícil de lembrar, nada che impide crear a túa propia función cunha sintaxe máis sinxela e un nome sinxelo como RemoveText . A función definida polo usuario (UDF) pódese escribir de dúas maneiras:
Código VBA 1:
Aquí observamos cada carácter da cadea fonte un por un e comprobe se é numérico ou non. Se é un número, o carácter engádese á cadea resultante.
Función RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i , 1)) Entón sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionCódigo VBA 2:
O código crea un obxecto para procesar unha expresión regular. Usando RegExp, eliminamos todos os caracteres que non sexan os díxitos 0-9 da cadea de orixe.
Función RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Finalizar coa función FinalNas follas de traballo pequenas, ambos os códigos funcionarán igual de ben. Nas follas de traballo grandes onde a función se chama centos ou miles de veces, o código 2 que usa VBScript.RegExp funcionará máis rápido.
Os pasos detallados para inserir o código no teu libro de traballo pódense atopar aquí: Como inserir VBA código en Excel.
Calquera enfoque que elixas, desde a perspectiva do usuario final, a función para eliminar texto e deixar números é tan sinxela como esta:
RemoveText(string)Por exemplo, para elimina os caracteres non numéricos da cela A2, a fórmula en B2 é:
=RemoveText(A2)
Só que cópiaa na columna e obterás este resultado:
Nota. Tanto as fórmulas nativas como a función personalizada producen unha cadea numérica . Para convertelo nun número, multiplica o resultado por 1 ou engade cero ou envolve a fórmula na función VALOR. Por exemplo:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Como eliminar números da cadea de texto en Excel
A solución funciona en Excel 365, Excel 2021 e Excel 2019
As fórmulas para eliminar números dunha cadea alfanumérica son bastante similares ás que se comentaron no exemplo anterior.
Para Excel 365 - 2019:
TEXTJOIN(" ", VERDADEIRO, SE(ISERR(MID( celda , FILA(INDIRECT("1:"&LEN( cela ) )), 1) *1), MID( celda , FILA(INDIRECT("1:"&LEN( ) cela ))), 1), ""))En Excel 2019, lembre de facelo unha fórmula matricial premendo as teclas Ctrl + Maiús + Intro xuntos.
Para Excel 365 e 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( celda , SEQUENCE(LEN( celda 1)) *1), MID ( celda , SEQUENCE(LEN( celda )), 1), ""))Por exemplo, para eliminar números dunha cadea en A2, a fórmula é:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Ou
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
Como resultado, todos os números quítanse dunha cela e gárdanse os caracteres de texto:
Como se mostra na captura de pantalla anterior, a fórmula elimina os caracteres numéricos de calquera posición dunha cadea: ao principio, ao final e ao medio. Non obstante, hai unha advertencia: se unha cadea comeza cun número seguido dun espazo , ese espazo é conservado, o que produce un problema de espazos principais (como en B2).
Para desfacerse dos espazos adicionais antes do texto , envolve a fórmula na función TRIM así:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Agora, os teus resultados son absolutamente perfectos!
Como funciona esta fórmula:
En esencia, a fórmula funciona igual que se explica no exemplo anterior. A diferenza é que, desde a matriz final servida ata a función TEXTJOIN, cómpre eliminar números, non texto. Para facelo, usamos a combinación das funcións IF e ISERROR.
Como lembras,MID(…)+0 xera unha matriz de números e #VALOR! erros que representan caracteres de texto nas mesmas posicións:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
A función ISERROR detecta os erros e pasa a matriz resultante de valores booleanos a IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Cando a función SE ve TRUE (un erro), insire o carácter de texto correspondente na matriz procesada coa axuda doutra función MID. Cando a función SE ve FALSO (un número), substitúea por unha cadea baleira:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Esta matriz final pasa a TEXTJOIN, polo que concatena os caracteres de texto e saca o resultado.
Función personalizada para eliminar números do texto
A solución funciona para todas as versións de Excel
Tenndo presente que se debe manter unha fórmula robusta simple, compartirei o código da función definida polo usuario (UDF) para eliminar calquera carácter numérico.
Código VBA 1:
Función RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Entón sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunciónCódigo VBA 2:
Función RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionComo é o caso da función RemoveText, é mellor usar o segundo código en grandefollas de traballo para optimizar o rendemento.
Unha vez que se engade o código ao teu libro de traballo, podes eliminar todos os caracteres numéricos dunha cela usando esta función personalizada:
RemoveNumbers(string)No noso caso, o a fórmula en B2 é:
=RemoveNumbers(A2)
Para recortar os espazos iniciais, se os hai, aniña a función personalizada dentro de TRIM como se faría cunha fórmula nativa:
=TRIM(RemoveNumbers(A2))
Dividir números e texto en columnas separadas
En caso de querer separar o texto e os números en dúas columnas, sería bo facer o traballo cunha única fórmula , de acordo? Para iso, só combinamos o código das funcións RemoveText e RemoveNumbers nunha soa función, chamada SplitTextNumbers , ou simplemente Dividir , ou o que queiras :)
Código VBA 1:
Código VBA 2:
Función SplitTextNumbers(str As String , is_remove_text As String) Con 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 FunctionA nosa nova función personalizada require dous argumentos:
SplitTextNumbers(string, is_remove_text)Onde is_remove_text é un valor booleano que indica que caracteres eliminar:
- VERDADEIRO ou 1: elimina o texto e mantén os números
- FALSO ou 0: elimina os números e mantén o texto
Para o noso conxunto de datos de mostra, as fórmulas adoptan esta forma:
Para eliminar caracteres non numéricos:
=SplitTextNumbers(A2, TRUE)
Para eliminar caracteres numéricos :
=SplitTextNumbers(A2, FALSE)
Consello. Para evitar un posible problema de espazos principais, recoméndolle que sempre envolve a fórmula que elimina números na función TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Ferramenta especial para eliminar números ou texto
Para quen o faga Non me gusta complicar as cousas innecesariamente, mostrarei o noso propio xeito de eliminar texto ou números en Excel.
Supoñendo que se engade a nosa Ultimate Suite á túa cinta de Excel, isto é o que fas:
- Na pestana Datos de Ablebits , no grupo Texto , faga clic en Eliminar > Eliminar caracteres .
Consello. Se os resultados conteñen algúns espazos principais, os espazos de recorteferramenta eliminaraos en pouco tempo.
Así é como eliminar texto ou caracteres numéricos dunha cadea en Excel. Grazas por ler e espero verte no noso blog a próxima semana!
Descargas dispoñibles
Eliminar texto ou números en Excel - exemplos (ficheiro .xlsm)
Ultimate Suite: versión de proba (ficheiro .exe)