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.
  • REDUCE y APILARV: acumulan resultados fila a fila para construir la matriz final.
  • BYROW y LAMBDA: aplican una operación a cada fila y encapsulan resultados (la base de la técnica de thunks).
  • TEXTODESPUES, TOMAR y EXCLUIR: 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