Partir un texto con separadores sobre todo un rango sin ir celda a celda
Interesante problema planteado por Juan: tiene una columna de textos donde cada celda guarda varios valores unidos por el carácter |, y quiere separarlos todos de una vez. El obstáculo es conocido: DIVIDIRTEXTO no desborda sobre un rango, así que obliga a ir celda a celda. La comunidad respondió con cinco enfoques distintos, desde el truco más sencillo hasta técnicas avanzadas. El caso incluye el fichero Excel original con el problema y las soluciones.
El enfoque más directo
Miki propone concatenar todo el rango con un separador auxiliar y volver a partir por ambos:
``
=DIVIDIRTEXTO(UNIRCADENAS("; ";;D4:D11);"|";";")
`
Se pega todo el rango en un solo texto usando ; como separador de filas, y luego DIVIDIRTEXTO parte a la vez por | (columnas) y por ; (filas).
Con secuencia de ocurrencias
Leo aporta un primer método que extrae cada trozo por su posición dentro de la celda:
`
=DIVIDIRTEXTO(TEXTODESPUES("|"&D4:D11;"|";{1\2\3\4\5\6});"|")
`
TEXTODESPUES recorre las ocurrencias del separador (aquí seis) y DIVIDIRTEXTO limpia el resto.
Recursión por bisección
Su segundo método es una LAMBDA recursiva que parte el rango en mitades hasta llegar a una sola fila, resolviéndola con DIVIDIRTEXTO y apilando el resultado:
`
=LET(
F; LAMBDA(F;x;
LET(n; FILAS(x);
SI(n=1;
DIVIDIRTEXTO(x;"|";;1);
APILARV(F(F;TOMAR(x;n/2)); F(F;EXCLUIR(x;n/2)))
)
)
);
F(F;D4:D11)
)
`
Reduciendo fila a fila
Otro miembro de la comunidad lo resuelve con REDUCE, acumulando cada fila partida con APILARV y descartando el cero inicial con EXCLUIR:
`
=EXCLUIR(REDUCE(0;D4:D11;LAMBDA(a;v;APILARV(a;DIVIDIRTEXTO(v;"|"))));1)
`
Con thunks
Nacho plantea la solución más avanzada usando la técnica de thunks: envolver el resultado de DIVIDIRTEXTO de cada fila en una LAMBDA sin argumentos con BYROW, y reconstruir después la matriz final con ARCHIVOMAKEARRAY, leyendo cada thunk celda a celda. Es el enfoque más potente cuando cada fila puede tener un número distinto de trozos:
`
=LET(
_ths; BYROW(D4:D11;
LET(_th; LAMBDA(x;LAMBDA(x));
LAMBDA(x;_th(DIVIDIRTEXTO(x;"|")))));
ARCHIVOMAKEARRAY(
FILAS(_ths);
COLUMNAS(INDICE(_ths;1;1)());
LAMBDA(r;c; INDICE(INDICE(_ths;r;1)();1;c))
)
)
`
Con expresiones regulares
Oscar propone además una vía con REGEXEXTRACCION, aunque adaptada a los datos concretos del ejemplo (es la menos genérica de todas).
---
Ampliación: cuando el origen es un rango derramado y el resultado debe ser numérico
En agosto de 2026 volvió a plantearse el mismo problema con dos vueltas de tuerca que merecen su propio apartado. Otro miembro de la comunidad tenía una columna con celdas del tipo 230, 50-50-50, 55, 15.75-15.75-15.75-15.75, y necesitaba todos esos números en una sola columna. Las dos diferencias con el caso original:
- Los datos de partida no eran un rango normal, sino el resultado derramado de un MAP.
- El resultado tenía que salir como número, no como texto.
El truco del round-trip funciona igual, pero hay que referenciar el rango derramado con la almohadilla en vez de escribir sus coordenadas. Nacho lo resume así: en lugar del rango, se pone la celda donde está el MAP seguida de #.
`
=DIVIDIRTEXTO(UNIRCADENAS("-";;E2#);;"-")
`
E2# es el operador de rango derramado: apunta a todo el resultado del MAP sea cual sea su tamaño, así que la fórmula sigue funcionando si mañana el MAP devuelve más filas. Fíjate además en el doble punto y coma de DIVIDIRTEXTO: se salta el separador de columnas para partir solo por filas, de modo que todo cae en una única columna.
Oscar aporta la variante con expresiones regulares, que resuelve de paso la conversión a número:
`
=--ENCOL(REGEXEXTRACCION(CONCAT(E2:E10&"-");"[\d.]+";1))
`
Aquí CONCAT pega todo el rango en un solo texto añadiendo un guion al final de cada celda, REGEXEXTRACCION con el tercer argumento a 1 devuelve todas las coincidencias del patrón (secuencias de dígitos y puntos decimales), ENCOL las pone en una columna y el doble negativo -- las convierte de texto a número.
Ese --` es el detalle que se olvida con más frecuencia: cualquier función de la familia de texto devuelve texto, aunque lo que veas sean cifras. Si el resultado se va a sumar o comparar después, hay que forzar la conversión.
Cinco caminos para el mismo problema, un buen recordatorio de que en Excel moderno casi nunca hay una única forma de resolver algo.
Un problema clásico del Excel moderno
Si trabajas con datos exportados de otros sistemas, seguro que te has topado con celdas que guardan varios valores juntos, separados por un carácter como |. Separarlos es fácil con DIVIDIRTEXTO... hasta que quieres hacerlo sobre toda una columna de golpe. Ahí aparece el muro: DIVIDIRTEXTO no desborda sobre un rango, así que te obliga a arrastrar la fórmula celda a celda.
En la comunidad de InfluExcel, un miembro planteó justo este caso y la respuesta fue una pequeña masterclass: cinco formas distintas de resolverlo, desde el truco de una línea hasta técnicas de programación funcional.
El problema
Partimos de una columna donde cada celda contiene algo como 46224|57|clientes|726. El objetivo es obtener una tabla donde cada trozo quede en su propia columna, procesando todas las filas a la vez, sin fórmulas auxiliares repetidas.
Cinco caminos para la misma solución
1. El truco más directo (con UNIRCADENAS). Se concatena todo el rango en un único texto usando un separador de filas auxiliar y luego se parte por los dos separadores a la vez:
`` =DIVIDIRTEXTO(UNIRCADENAS("; ";;D4:D11);"|";";") ``
Una sola fórmula, sin rodeos. Es la opción ideal cuando todas las filas tienen la misma estructura.
2. Por secuencia de ocurrencias. Usando TEXTODESPUES con una constante de matriz como índice, se extrae cada trozo por su posición dentro de la celda. Práctico cuando sabes de antemano cuántas partes vas a obtener.
3. Recursión por bisección. Una LAMBDA recursiva parte el rango en mitades hasta llegar a una sola fila, la resuelve con DIVIDIRTEXTO y apila los resultados con APILARV. La bisección mantiene baja la profundidad de recursión, así que aguanta rangos grandes sin quedarse corta.
4. Acumulando fila a fila con REDUCE. Se recorre el rango acumulando cada fila ya partida y descartando el valor inicial:
`` =EXCLUIR(REDUCE(0;D4:D11;LAMBDA(a;v;APILARV(a;DIVIDIRTEXTO(v;"|"))));1) ``
Es una forma muy legible de pensar el problema como "para cada fila, parte el texto y añádelo debajo".
5. Con thunks (la más avanzada). Envolviendo el resultado de cada fila en una LAMBDA sin argumentos con BYROW, y reconstruyendo la matriz final con ARCHIVOMAKEARRAY, se resuelve incluso cuando cada fila tiene un número distinto de trozos. Es la técnica más potente y la que mejor escala.
Un miembro añadió además una vía con expresiones regulares mediante REGEXEXTRACCION, aunque adaptada a los datos concretos del ejemplo.
Funciones clave
DIVIDIRTEXTO: parte un texto por uno o varios separadores. La base de todo el caso.UNIRCADENAS: une un rango en un solo texto con un separador; el corazón del truco de una línea.REDUCEyAPILARV: acumulan resultados fila a fila para construir la matriz final.BYROWyLAMBDA: aplican una operación a cada fila y encapsulan resultados (la base de la técnica de thunks).TEXTODESPUES,TOMARyEXCLUIR: manejo fino de texto y de trozos de matriz.
Conclusión
Lo interesante de este caso no es una fórmula concreta, sino la variedad: el mismo problema resuelto por cinco personas de cinco maneras, cada una con su equilibrio entre sencillez y potencia. Si tus datos son homogéneos, el truco de UNIRCADENAS te basta; si cada fila es un mundo, los thunks te salvan. Así funciona la comunidad de InfluExcel: alguien plantea una duda real y, en cuestión de horas, se convierte en un catálogo de técnicas del que todos aprendemos.
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
- Generar la serie de Fibonacci con REDUCE, APILARV y LAMBDA CasoInteresante ejercicio compartido en la comunidad: generar los primeros N números de la serie de Fibonacci usando exclusivamente fórmulas de
- 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
- Optimización de REDUCE+APILARV con LAMBDA recursiva en bisección CasoAlejandro plantea un reto de rendimiento interesante: tiene una fórmula LET enorme que calcula la permanencia de carga en puerto por matrícu
- 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
- Serie de Fibonacci con LAMBDA y REDUCE en una sola fórmula CasoSurge un reto interesante en la comunidad: generar la serie de Fibonacci con una sola fórmula de Excel, sin celdas auxiliares ni macros. Un
- 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á
- 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
- Extraer máximos por clave y calcular tiempo transcurrido: AGRUPARPOR vs fórmulas clásicas CasoInteresante caso doble que arrancó con una necesidad muy concreta: dada una tabla con columnas Clave, Secuencia y Rev, obtener el máximo de