Hola a todos:
El post de hoy es un pequeño ejercicio que he realizado hace unos días probando algunas funciones para una tarea distinta pero que finalmente acabé aplicando para extraer números o letras de una cadena alfanumérica.
Sobre esto tenéis en Excel Signum una serie de post:
- Con VBA en una UDF: EXTRAER NÚMEROS Y TEXTO DE UNA CADENA DE DATOS ALFANUMÉRICA
- Con Power Query: EXTRAER NÚMEROS O LETRAS CON POWER QUERY
- Con Typescript: FUNCIÓN PARA EXTRAER NÚMEROS O LETRAS CON TYPESCRIPT
Para poder realizar esta tarea con fórmulas de Excel debemos tener en cuenta que vamos a utilizar fórmulas de matriz dinámica y que dependiendo de cuál sea vuestra versión de Excel tendréis o no habilitadas.
Pero vamos con el ejemplo:
La idea es separar las letras y los números y ojo, que mantengan el mismo orden.
Para realizar el ejercicio vamos a extraer los números. Para ello la fórmula que vamos a utilizar es la siguiente:
=TRANSPONER(FILTRAR(SI.ERROR(EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)*1;"*");SI.ERROR(EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)*1;"*")<>"*"))
Esta es una fórmula bastante exigente pero que funciona muy bien. Veamos por pasos cómo realizar los cálculos:
En primer lugar extraemos todos los elementos de la cadena:
=EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)
El siguiente paso es considerar únicamente los números y las letras y otros caracteres los marcamos con un * (podéis utilizar otro símbolo si queréis).
A continuación utilizaremos la función FILTRAR para seleccionar lo que no es *, es decir, lo números y transponemos los datos para mostrarlos en horizontal:
Como podéis observar ya hemos conseguido extraer los números de nuestra cadena texto. Y por otra parte, sería ahora también muy sencillo sumar el contenido numérico de la cadena.
Y ahora vamos con la parte de las letras. En este caso el contenido es un poco más largo pero en esencia es prácticamente igual.
=TRANSPONER(FILTRAR(SI(ESNUMERO(EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)*1);"";EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1));SI(ESNUMERO(EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)*1);"";EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1))<>""))
En primer lugar debemos mostrar las letras y ocultar los números:
Finalmente utilizaremos la función filtrar para mostrar únicamente los datos no numéricos ocultado las celdas en blanco y transponemos los datos:
Y esto es todo, lógicamente las fórmulas se pueden modificar y adaptar a casos específicos. Por ejemplo si queremos mostrar la suma de la parte numérica de una cadena alfanumérica bastaría con colocar la función suma delante de la fórmula que extrae los números, o reducirla así:
=SUMA(SI.ERROR(EXTRAE(A2;FILA(INDIRECTO("1:"&LARGO(A2)));1)1;""))
En fin, que existen muchas formas de hacer este tipo de trabajos, esta de hoy es uno de ellas 🙂
Espero que os sea de utilidad.
Descarga el archivo de ejemplo pulsando en:
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies