Tabla de contenido
El tutorial muestra cómo extraer números de varias cadenas de texto en Excel utilizando fórmulas y la herramienta Extraer.
Cuando se trata de extraer parte de una cadena de texto de una longitud dada, Excel proporciona tres funciones de Subcadena (Izquierda, Derecha y Medio) para manejar rápidamente la tarea. Cuando se trata de extraer números de una cadena alfanumérica, Microsoft Excel proporciona... nada.
Para obtener un número a partir de una cadena en Excel, se necesita un poco de ingenio, un poco de paciencia y un montón de funciones diferentes anidadas unas dentro de otras. O bien, puede ejecutar la herramienta Extraer y tener el trabajo hecho con un clic del ratón. A continuación encontrará todos los detalles sobre ambos métodos.
Cómo extraer un número del final de una cadena de texto
Cuando tienes una columna de cadenas alfanuméricas donde el número viene después del texto, puedes usar la siguiente fórmula para obtenerlo.
CORRECTO( célula LEN( célula ) - MAX(IF(ISNUMBER(MID( célula ROW(INDIRECT("1:"&LEN( célula ))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( célula ))), 0)))Nos detendremos un poco más adelante en la lógica de la fórmula. Por ahora, basta con sustituir célula con una referencia a la celda que contiene la cadena original (A2 en nuestro caso), e introduce la fórmula en cualquier celda vacía de la misma fila, digamos en B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Esta fórmula obtiene los números sólo del final. Si una cadena también tiene números al principio o en el medio, se ignoran:
La extracción se realiza con la función DERECHA que pertenece a la categoría de funciones Texto. La salida de esta función es siempre texto En nuestro caso, el resultado es un subcadena numérica que en términos de Excel también es texto, no número.
Si necesita que el resultado sea un número (que puede utilizar en cálculos posteriores), luego envuelva la fórmula en la función VALOR o realice una operación aritmética que no cambie el resultado, por ejemplo, multiplique por 1 o sume 0. Para detectar errores en las cadenas que no contienen un solo número, utilice la función IFERROR. Por ejemplo:
=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)))), "")
o
=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, "")
Nota. En Excel de matriz dinámica (Office 365 y 2021), se introduce la fórmula de la forma habitual con la tecla Intro. En Excel 2019 y anteriores, solo funciona como fórmula de matriz, así que recuerda pulsar Ctrl + Mayús + Intro para completarla.
Cómo funciona esta fórmula:
Para extraer números de una cadena alfanumérica, lo primero que hay que saber es dónde empezar la extracción. La posición del último carácter no numérico de una cadena se determina con la ayuda de esta fórmula engañosa:
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))
Para entender la lógica, investiguémosla desde dentro:
La combinación ROW(INDIRECT("1:"&LEN(A2))) crea una secuencia de números correspondiente al total de caracteres de la cadena de origen (A2), y servimos estos números secuenciales a MID como números iniciales:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
La función MID extrae cada carácter individual de A2 y los devuelve como una matriz:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Como MID es una función de texto, su salida es siempre texto (como puede observar, todos los caracteres van entre comillas). Para convertir los numéricos en números, multiplicamos la matriz por 1 (la doble negación --MID() tendrá el mismo efecto). El resultado de esta operación es una matriz de números y errores #¡VALOR! que representan caracteres no numéricos:
ISNUMBER({0;5;#VALOR!;#VALOR!;#VALOR!;#VALOR!;0;1})
La función ISNUMBER evalúa cada elemento de la matriz y da su veredicto en forma de valores booleanos - TRUE para números, FALSE para cualquier otra cosa:
{VERDADERO;VERDADERO;FALSO;FALSO;FALSO;VERDADERO;VERDADERO}
Esta matriz pasa a la prueba lógica de la función IF, donde cada elemento de la matriz se compara con FALSE:
IF({TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)
Para cada FALSE (valor no numérico), otra función ROW(INDIRECT()) devuelve su posición relativa en la cadena. Para cada TRUE (valor numérico), se devuelve un cero. La matriz resultante tiene el siguiente aspecto:
{0;0;3;4;5;6;0;0}
El resto es fácil. La función MAX encuentra el número más alto de la matriz anterior, que es la posición del último valor no numérico de la cadena (6 en nuestro caso). Simplemente, resta esa posición de la longitud total de la cadena devuelta por LEN, y pasa el resultado a RIGHT para indicarle cuántos caracteres debe extraer de la parte derecha de la cadena:
RIGHT(A2, LEN(A2) - 6)
¡Hecho!
Cómo extraer un número del principio de una cadena de texto
Si trabaja con registros en los que aparece texto después del número, puede extraer el número del inicio de una cadena utilizando esta fórmula genérica:
IZQUIERDA( célula MATCH(FALSE, ISNUMBER(MID( célula ROW(INDIRECT("1:"&LEN( célula )+1)), 1) *1), 0) -1)Con la cadena original en A2, utiliza la siguiente fórmula para obtener el número:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1))), 1) *1), 0) -1)
No importa cuántos dígitos haya en medio o al final, sólo se extrae el número inicial:
Nota. En Excel 365 y Excel 2021, debido a la compatibilidad con matrices dinámicas, una fórmula normal funciona bien. En Excel 2019 y anteriores, debe pulsar Ctrl + Mayús + Intro para convertirlo explícitamente en un fórmula de matriz .
Cómo funciona esta fórmula:
Aquí volvemos a utilizar la combinación de las funciones ROW, INDIRECT y LEN para crear una secuencia de números igual al total de caracteres de la cadena de origen más 1 (el papel de ese carácter adicional quedará claro un poco más adelante).
ROW(INDIRECT("1:"&LEN(A2)+1))
MID e ISNUMBER hacen el mismo trabajo que en el ejemplo anterior - MID extrae caracteres individuales e ISNUMBER los convierte en valores lógicos. La matriz resultante de TRUE's y FALSE's va a la función MATCH como una matriz de búsqueda:
MATCH(FALSE, {VERDADERO;VERDADERO;FALSO;FALSO;FALSO;FALSO;VERDADERO;VERDADERO;FALSO}, 0)
MATCH calcula una posición relativa del primer FALSE, lo que nos da la posición del primer carácter no numérico de la cadena (3 en A2). Para extraer los números anteriores, restamos 1 de la posición el primer carácter del texto y servimos la diferencia a los num_chars de la función IZQUIERDA:
IZQUIERDA(A2, 3-1)
Ahora, volvamos a un carácter "extra" en la secuencia generada por ROW(INDIRECT()+1)). Como ya sabes, esta secuencia proporciona los puntos de partida para la función MID. Sin +1, MID extraería exactamente tantos caracteres como hay en la cadena original. Si la cadena contiene sólo números, ISNUMBER devolverá sólo TRUE's mientras que MATCH necesita al menos un FALSE. Para asegurarnos de ello, añadimos uncarácter más a la longitud total de la cadena, que la función MID convertiría en una cadena vacía. Por ejemplo, en B7, MID devuelve esta matriz:
{"1"; "2"; "3"; "4";""}
Nota: Como en el caso de la función DERECHA, IZQUIERDA también devuelve un valor subcadena numérica Para obtener el resultado como un número en lugar de una cadena numérica, anide la fórmula en la función VALUE o multiplique el resultado por 1, como se muestra en el primer ejemplo.
Cómo obtener un número a partir de cualquier posición de una cadena
Si su tarea implica extraer un número de cualquier parte de una cadena, puede utilizar la siguiente fórmula alucinante publicada en el foro de MrExcel:
=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)
Donde A2 es la cadena de texto original.
Desglosar esta fórmula requeriría un artículo aparte, así que puedes simplemente copiarla en tu hoja de cálculo para asegurarte de que realmente funciona :)
Sin embargo, al examinar los resultados, es posible que observe un inconveniente insignificante: si la cadena de origen no contiene ningún número, la fórmula devuelve cero, como en la fila 6 de la captura de pantalla anterior. Para solucionarlo, puede envolver la fórmula en la sentencia IF, cuya prueba lógica comprueba si la cadena de origen contiene algún número. En caso afirmativo, la fórmula extrae el número, de lo contrario devuelve un valor vacíocadena:
=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),"")
Como se muestra en la siguiente captura de pantalla, la fórmula mejorada funciona de maravilla (felicitaciones a Alex, nuestro gurú de Excel, por esta mejora):
A diferencia de todos los ejemplos anteriores, el resultado de esta fórmula es número Para asegurarte de ello, observa los valores alineados a la derecha en la columna B y los ceros a la izquierda truncados.
Consejo. En Excel 365 - Excel 2019, existe una solución mucho más sencilla con la ayuda de la función TEXTJOIN. Consulte Cómo eliminar texto y conservar números.
Extraer un número de una cadena de texto con Ultimate Suite
Como acabas de ver, no existe una fórmula trivial de Excel para obtener un número a partir de una cadena de texto. Si tienes dificultades para entender las fórmulas o para ajustarlas a tus conjuntos de datos, puede que te guste esta sencilla forma de obtener un número a partir de una cadena en Excel.
Con nuestra Ultimate Suite añadida a su cinta de Excel, así es como puede recuperar rápidamente un número a partir de cualquier cadena alfanumérica:
- Ir a la Datos de Ablebits tab> Texto y haga clic en Extracto :
- Seleccionar todas las celdas con las cadenas de origen.
- En el panel de la herramienta Extraer, seleccione la opción Extraer números botón de radio.
- Dependiendo de si desea que los resultados sean fórmulas o valores, seleccione la opción Insertar como fórmula o déjela sin seleccionar (por defecto).
Mi consejo es que seleccione esta casilla si desea que los números extraídos se actualicen automáticamente en cuanto se realice algún cambio en las cadenas de origen. Si desea que los resultados sean independientes de las cadenas originales (por ejemplo, en caso de que tenga previsto eliminar los datos de origen más adelante), no seleccione esta casilla.
- Haga clic en el botón Insertar resultados botón. ¡Hecho!
Como en el ejemplo anterior, los resultados de la extracción son números lo que significa que puedes contar, sumar, promediar o realizar cualquier otro cálculo con ellos.
En este ejemplo, hemos elegido insertar los resultados como valores y el complemento hizo exactamente lo que se le pidió:
Si el Insertar como fórmula estaba seleccionada, se observaría un fórmula Si tiene curiosidad por saber cuál es, descárguese la versión de prueba de Ultimate Suite y compruébelo usted mismo :)
Descargas disponibles
Número de extracción de Excel - libro de ejemplo (archivo .xlsx)
Ultimate Suite - versión de prueba (archivo .exe)