Extraer números de texto con formato moneda: 5 enfoques con y sin REGEX
Un miembro de la comunidad trabaja con un listado de reclamaciones legales donde los importes están escritos como texto con formatos inconsistentes: $868.700,30, con signo peso, separadores de miles y decimales mezclados. Necesita extraer la parte entera (868700) como número operable para poder sumar la columna.
El reto principal: el separador de miles (punto) y el de decimales (coma) dependen de la configuración regional del equipo, y REGEXEXTRACCION devuelve texto, no números.
Solución 1: REGEXEXTRACCION con patrón simple (John)
``
=REGEXEXTRACCION(Celda;"\d[\d.]")
`
Captura el primer grupo de dígitos consecutivos (incluyendo puntos como separadores de miles). El patrón \d[\d.] busca un dígito seguido de más dígitos o puntos.
Solución 2: Grupos de captura con CONCAT (Leo)
`
=CONCAT(REGEXEXTRACCION(G3;"(\d+).(\d+)";2))
`
Usa grupos de captura (\d+) para extraer bloques de dígitos separados por cualquier carácter, y luego los concatena con CONCAT para reconstruir el número sin separadores.
Solución 3: VALOR.NUMERO para forzar separador decimal (Oscar)
`
=VALOR.NUMERO(REGEXEXTRACCION(A1;"[\d+.]+");",")
`
Combina la extracción REGEX con VALOR.NUMERO, que acepta un segundo argumento para indicar con qué separador decimal viene el dato. Esto resuelve el problema de la configuración regional.
Solución 4: DIVIDIRTEXTO sin REGEX (Gerson)
`
=@DIVIDIRTEXTO(A1;{"$";","};;1)
`
Enfoque completamente distinto: usa DIVIDIRTEXTO con un array de delimitadores ($ y ,) para partir el texto en fragmentos. El @ extrae el primer resultado (la parte antes de la coma, sin el signo peso). No necesita REGEX.
Solución 5: TEXTODESPUES + TEXTOANTES (John)
`
=--TEXTODESPUES(TEXTOANTES(F3;",");"$")
`
Otra alternativa sin REGEX: TEXTOANTES corta todo lo que hay antes de la coma (eliminando los decimales), y TEXTODESPUES elimina el signo peso. El doble negativo -- convierte el resultado a número.
La solución original del autor
El autor ya lo tenía resuelto con una fórmula mucho más compleja usando BYROW, EXTRAE, SECUENCIA y ESNUMERO para evaluar carácter por carácter:
`
=SI.ERROR(BYROW(I2:I26;LAMBDA(x;CONCAT(ENFILA(ESNUMERO(--EXTRAE(x;SECUENCIA(;LARGO(x));1))--EXTRAE(x;SECUENCIA(;LARGO(x));1);2))1));0)
``
Funciona, pero las soluciones de la comunidad muestran cómo simplificarlo drásticamente.
El problema: convertir importes en texto a número operable
Un miembro trabajaba con reclamaciones legales donde los importes venían como texto con formatos inconsistentes: $868.700,30, con signo de peso, separadores de miles y decimales mezclados. Necesitaba extraer la parte entera (868700) como número para poder sumar la columna.
El reto: el separador de miles (el punto) y el de decimales (la coma) dependen de la configuración regional del equipo, y las funciones REGEX devuelven texto, no número. La comunidad ofreció cinco enfoques, con y sin expresiones regulares.
1. REGEXEXTRACCION con un patrón simple (John)
John usó REGEXEXTRACCION con un patrón que captura el primer grupo de dígitos consecutivos, admitiendo también los puntos de los miles: en palabras, "un dígito seguido de más dígitos o puntos". Devuelve la parte entera, aunque como texto.
2. Grupos de captura con CONCAT (Leo)
Leo tiró de grupos de captura dentro de REGEXEXTRACCION para aislar los bloques de dígitos separados por cualquier carácter, y luego los unió con CONCAT para reconstruir el número sin separadores. La gracia está en los grupos: cada paréntesis del patrón captura una parte que después se recompone.
3. VALOR.NUMERO para fijar el decimal (Oscar)
El paso que faltaba: convertir ese texto en número de verdad. Oscar combinó la extracción REGEX con VALOR.NUMERO, cuyo segundo argumento indica con qué separador decimal viene el dato. Así resuelve el problema de la configuración regional de un plumazo, sin depender de cómo tenga configurado Excel cada usuario.
4. DIVIDIRTEXTO sin REGEX (Gerson)
Enfoque completamente distinto, sin expresiones regulares:
`` =@DIVIDIRTEXTO(A1;{"$";","};;1) ``
Parte el texto usando un array de delimitadores (el signo de peso y la coma). El operador @ se queda con el primer fragmento: la parte anterior a la coma y ya sin el símbolo de moneda.
5. TEXTOANTES + TEXTODESPUES (John)
Otra vía sin REGEX, muy legible:
`` =VALOR(TEXTODESPUES(TEXTOANTES(F3;",");"$")) ``
TEXTOANTES corta todo lo anterior a la coma (elimina los decimales) y TEXTODESPUES quita el signo de peso. VALOR convierte el texto resultante en número (también sirve anteponer un doble negativo o multiplicar por 1).
Y la fórmula original del autor
El autor ya lo tenía resuelto con una fórmula mucho más larga que recorría el texto carácter a carácter con BYROW, EXTRAE, SECUENCIA y ESNUMERO, quedándose solo con los dígitos. Funcionaba, pero las soluciones de la comunidad muestran cómo simplificarla drásticamente.
Funciones clave
REGEXEXTRACCION— extrae texto mediante expresiones regulares y grupos de captura.VALOR.NUMERO— convierte texto a número fijando el separador decimal.DIVIDIRTEXTO— parte texto por varios delimitadores a la vez.TEXTOANTES/TEXTODESPUES— cortan por un separador.VALOR— convierte texto numérico a número.
Conclusión
Cinco maneras de domar un dato sucio: desde las expresiones regulares hasta DIVIDIRTEXTO o el clásico TEXTOANTES/TEXTODESPUES. La clave, cuando el formato depende de la región, es rematar con VALOR.NUMERO y su separador explícito. Limpiar datos mal formateados es de lo más frecuente en el día a día, y en la comunidad de InflueXcel casi siempre aparece una versión más corta que la tuya. Descarga el fichero y compáralas.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Eliminar celdas vacías al concatenar con DIVIDIRTEXTO y BYROW CasoJuan plantea lo que parece una duda sencilla: tiene filas con valores y celdas vacías intercaladas, y necesita concatenar solo los valores n
- Reducir un número a un dígito con LAMBDA recursiva y secuencia intermedia CasoJoan Recasens plantea un reto matemático: reducir un número a un solo dígito sumando sus cifras de forma recursiva, y además guardar toda la
- Funciones window en Excel: el total del grupo en cada fila con LAMBDA y BYROW TutorialEn SQL se llaman funciones window: columnas que, para cada fila, traen un agregado calculado sobre un grupo mayor. El total de ese cliente a
- Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX CasoInteresante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 text
- Aplicar DIVIDIRTEXTO a un rango completo: 5 formas distintas CasoUn miembro de la comunidad intenta aplicar DIVIDIRTEXTO a un rango completo de celdas en lugar de celda por celda. Su fórmula inicial usa BY
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- IMPORTTEXT: importar múltiples CSV con LAMBDA recursiva y exploración profunda CasoCaso doble que combina la resolución de un problema práctico con una exploración exhaustiva de las nuevas funciones IMPORTTEXT e IMPORTCSV d
- ¿MAP o BYROW? Descubre cuándo usar cada una Tutorial¿MAP o BYROW? Descubre cuándo usar cada una y cómo estas funciones pueden transformar tu forma de trabajar en Excel. En este vídeo aprenderá
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- Power Query: rutas dinámicas para compartir ficheros sin romper conexiones CasoUn miembro de la comunidad plantea un problema muy frecuente: tiene una consulta de Power Query con una ruta de red fija (\\servidor\shared-