Separar texto en letras, números y caracteres especiales: 3 enfoques con REGEX y sin REGEX
Un miembro plantea un reto interesante: dado un texto que mezcla letras, números y caracteres especiales (por ejemplo "abc123!@#"), ¿cómo separar cada tipo en columnas distintas? El problema parece sencillo, pero tiene trampa: funciones como BYROW o MAP no pueden desbordar varios valores por iteración, lo que genera errores de #CALC!.
La comunidad responde con tres enfoques muy distintos.
El primero usa REGEXEXTRACCION + LAMBDA + MAP. Se crea una función LAMBDA reutilizable que recibe el patrón regex y lo aplica con MAP a todo el rango:
``
=LET(
L; LAMBDA(z;
MAP(A2:A4; LAMBDA(x;
CONCAT(REGEXEXTRACCION(x; z; 1))
))
);
APILARH(
L("[A-Za-z]");
--L("\\d+");
L("[^A-Za-z0-9]")
)
)
`
El segundo enfoque usa REGEXREEMPLAZAR de forma ultracompacta. Inspirada en una solución de JvdV (referente mundial en REGEX para Excel), esta fórmula usa una constante matricial de tres patrones para eliminar lo que NO es cada tipo:
`
=LET(
a; REGEXREEMPLAZAR(A2:A4; {"\PL"; "\D"; "[^\W_]"}; );
SI.ERROR(--a; a)
)
`
Los patrones \PL (no-letras), \D (no-dígitos) y [^\W_] (no-especiales) hacen todo el trabajo. El SI.ERROR(--a; a) convierte los números de texto a número real.
Para quienes no tienen acceso a las funciones REGEX, un tercer enfoque sin REGEX usa REDUCE + FILTRAR + CODIGO, descomponiendo cada carácter con EXTRAE + SECUENCIA y clasificándolos por rangos de CODIGO:
`
=EXCLUIR(
REDUCE(0; Z19:Z21; LAMBDA(a; v;
LET(
F; FILTRAR; C; CONCAT; CD; CODIGO;
_t; EXTRAE(v; SECUENCIA(LARGO(v)); 1);
APILARV(a; APILARH(
C(F(_t; (CD(_t)>=65) (CD(_t)<=122)));
C(F(_t; (CD(_t)>=48) (CD(_t)<=57)));
C(F(_t; (CD(_t)<48) + (CD(_t)>122) + ((CD(_t)>57) * (CD(_t)<65))))
))
)
));
1
)
`
Tres caminos al mismo destino: REGEX moderno y compacto, REGEX con LAMBDA` reutilizable, o funciones clásicas para quienes aún no tienen REGEX disponible.
El reto
Un miembro plantea algo aparentemente sencillo: dado un texto que mezcla letras, números y caracteres especiales (por ejemplo abc123 seguido de símbolos), separar cada tipo en su propia columna. La trampa: funciones como BYROW o MAP no pueden desbordar varios valores por iteración, y aparece el temido error #CALC!. La comunidad respondió con tres enfoques muy distintos.
Enfoque 1: REGEX con LAMBDA y MAP
El primero se apoya en REGEXEXTRACCION dentro de una LAMBDA reutilizable. La idea es definir una función que reciba un patrón y lo aplique con MAP a todo el rango, devolviendo con CONCAT solo los caracteres que casan. Se invoca tres veces —una para las letras, otra para los dígitos y otra para los caracteres especiales— y se unen los resultados con APILARH. Un doble signo menos delante del bloque de dígitos convierte ese texto en número real. La ventaja: la misma LAMBDA sirve para los tres tipos, solo cambia el patrón.
Enfoque 2: REGEXREEMPLAZAR ultracompacto
Inspirado en una solución de JvdV (referente mundial de REGEX en Excel), el segundo enfoque le da la vuelta al problema: en vez de extraer cada tipo, elimina todo lo que no es ese tipo. Con una constante matricial de tres patrones —uno que borra lo que no son letras, otro lo que no son dígitos y otro lo que no son especiales— REGEXREEMPLAZAR resuelve las tres columnas en una sola pasada. Después, envolver el resultado en SI.ERROR para intentar convertirlo a número deja los dígitos como valor numérico y respeta el texto. Es la versión más corta de las tres.
Enfoque 3: sin REGEX, con CODIGO y rangos
¿Y si tu Excel todavía no tiene las funciones REGEX? El tercer enfoque, más artesanal, descompone cada texto carácter a carácter con EXTRAE y SECUENCIA, y clasifica cada uno según su valor de CODIGO (el número que identifica al carácter): un rango para las letras, otro para los dígitos y el resto para los especiales. REDUCE recorre las filas acumulando el resultado, FILTRAR selecciona los caracteres de cada clase y CONCAT los vuelve a unir. Más largo, pero totalmente compatible sin REGEX.
Funciones clave
REGEXEXTRACCIONyREGEXREEMPLAZAR: extraen o eliminan texto según un patrón; el corazón de los dos primeros enfoques.MAPyLAMBDA: aplican una misma lógica a cada elemento del rango de forma reutilizable.APILARH: une en horizontal las columnas de letras, números y especiales.SI.ERROR: convierte a número lo que se puede y respeta el texto.EXTRAE,SECUENCIAyCODIGO: la base del enfoque sin REGEX, para descomponer y clasificar carácter a carácter.REDUCEyFILTRAR: iteran y seleccionan en la versión clásica.
Conclusión
Tres caminos al mismo destino: REGEX moderno y compacto, REGEX reutilizable con LAMBDA, y funciones clásicas para quien aún no tiene REGEX disponible. La elección depende de tu versión de Excel y de cuánto valoras la brevedad frente a la compatibilidad. Este tipo de retos de texto aparece constantemente en la comunidad de Influexcel, donde una misma pregunta acaba enseñando tres técnicas distintas.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Error #CALC! con MAP y AGRUPARPOR: solución con REDUCE+APILARV CasoNuevo reto de Excel resuelto por la comunidad: un usuario necesita aplicar AGRUPARPOR de forma iterativa sobre un rango de códigos de cuenta
- 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
- Descomposición de Cholesky con matrices dinámicas: de VBA a LAMBDA+REDUCE CasoJuan Pablo lanza un reto al grupo: tiene una descomposición de Cholesky resuelta con VBA y quiere saber si se puede hacer con matrices dinám
- Cálculos iterativos con REDUCE y APILARV en Excel CasoLa comunidad aborda un caso sobre cómo trabajar con bucles iterativos en Excel usando funciones modernas. Un miembro necesita realizar cálcu
- Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA CasoHéctor comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clav
- Distribución equitativa con LAMBDA, REDUCE y ALEATORIO CasoHéctor plantea la necesidad de repartir un conjunto de líneas (tareas, actividades) entre varios grupos de forma equitativa y aleatoria. Ide
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- ¿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á
- Partir un texto con separadores sobre todo un rango sin ir celda a celda CasoInteresante problema planteado por Juan: tiene una columna de textos donde cada celda guarda varios valores unidos por el carácter |, y quie
- Comparar elemento actual con el anterior: limitaciones de SCAN y solución elegante CasoUn miembro de la comunidad intenta usar SCAN con una "matriz coja" (dos columnas apiladas horizontalmente) para comparar cada elemento con e