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