Aplicar DIVIDIRTEXTO a un rango completo: 5 formas distintas
Un miembro de la comunidad intenta aplicar DIVIDIRTEXTO a un rango completo de celdas en lugar de celda por celda. Su fórmula inicial usa BYROW:
``
=BYROW(B5:B56;LAMBDA(fila;DIVIDIRTEXTO(fila;" ")))
`
El problema es que BYROW no puede devolver más de una celda por fila, así que la fórmula da error #CALC!.
Leo aporta nada menos que 5 enfoques distintos para resolver el problema, cada uno con sus ventajas:
1. DIVIDIRTEXTO + UNIRCADENAS (la más sencilla para pocos datos):
`
=DIVIDIRTEXTO(UNIRCADENAS("|";;B5:B56);" ";"|";;;"")
`
Concatena todo el rango con un separador especial y luego divide de golpe.
2. REDUCE + APILARV (el patrón clásico para apilar resultados de tamaño variable):
`
=SI.ND(
EXCLUIR(
REDUCE("";B5:B56;
LAMBDA(a;x;APILARV(a;DIVIDIRTEXTO(x;" ")))
);1
);"")
`
3. TEXTOANTES + TEXTODESPUES (para muchos datos, usando instancias):
`
=LET(
i; B5:B56;
k; " ";
s; SECUENCIA(;MAX(LARGO(i)-LARGO(SUSTITUIR(i;k;"")))+1);
SI.ERROR(TEXTODESPUES(k&TEXTOANTES(i&k;k;s);k;s);"")
)
`
Evita la recursión y es más eficiente con grandes volúmenes de datos.
4. Recursividad en bisección (enfoque avanzado):
`
=LET(
F; LAMBDA(F;x;LET(
n; FILAS(x);
SI(n=1;
DIVIDIRTEXTO(x;" ");
APILARV(F(F;TOMAR(x;n/2));F(F;EXCLUIR(x;n/2)))
)
));
SI.ND(F(F;B5:B56);"")
)
`
Divide el rango por la mitad recursivamente, lo que mejora el rendimiento en rangos grandes.
5. Recursividad normal (alternativa más directa):
`
=LET(
i; B5:B56;
F; LAMBDA(F;x;n;LET(
y; DIVIDIRTEXTO(INDICE(i;n;);" ");
SI(n<FILAS(i);APILARV(y;F(F;x;n+1));y)
));
SI.ND(F(F;i;1);"")
)
`
Un caso muy completo que ilustra la limitación de BYROW` y varias técnicas para superarla, desde las más sencillas hasta recursividad avanzada con bisección.
El problema
Separar texto con DIVIDIRTEXTO es trivial en una celda. El reto llega cuando quieres aplicarlo a un rango entero de golpe. La tentación es envolverlo en BYROW:
=BYROW(B5:B56;LAMBDA(fila;DIVIDIRTEXTO(fila;" ")))Pero falla con un error de cálculo, porque BYROW no puede devolver más de una celda por fila y DIVIDIRTEXTO genera varias columnas. Leo respondió con cinco enfoques, de lo más sencillo a lo más avanzado.
Enfoque 1: DIVIDIRTEXTO + UNIRCADENAS
La opción más directa para volúmenes pequeños: concatena todo el rango con un separador especial y divídelo de una sola vez.
=DIVIDIRTEXTO(UNIRCADENAS("|";;B5:B56);" ";"|";;;"")UNIRCADENAS une el rango insertando un marcador entre celdas y DIVIDIRTEXTO trocea usando tanto el espacio como ese marcador.
Enfoque 2: REDUCE + APILARV
El patrón de referencia para apilar resultados de tamaño variable:
=SI.ND(
EXCLUIR(
REDUCE("";B5:B56;LAMBDA(a;x;APILARV(a;DIVIDIRTEXTO(x;" "))));
1
);"")Recorre las celdas una a una, divide cada texto y va apilando. EXCLUIR(...;1) retira la fila vacía inicial y SI.ND limpia los huecos.
Enfoque 3: TEXTOANTES + TEXTODESPUES
Para muchos datos, este enfoque evita la recursión y gana en velocidad. Cuenta cuántas palabras hay midiendo la diferencia de longitud con LARGO y SUSTITUIR, genera una SECUENCIA de posiciones y extrae cada fragmento con TEXTODESPUES y TEXTOANTES.
=LET(
i; B5:B56;
k; " ";
s; SECUENCIA(;MAX(LARGO(i)-LARGO(SUSTITUIR(i;k;"")))+1);
SI.ERROR(TEXTODESPUES(k&TEXTOANTES(i&k;k;s);k;s);"")
)Enfoques 4 y 5: recursividad
Para cerrar, Leo muestra dos versiones recursivas con LAMBDA. La primera usa bisección: parte el rango por la mitad en cada llamada, lo que mejora mucho el rendimiento en rangos grandes. La segunda es una recursión lineal más directa, que procesa fila a fila. Son la artillería pesada, útiles cuando los otros métodos se quedan cortos.
Funciones clave
DIVIDIRTEXTO: la protagonista, que trocea texto por uno o varios separadores.UNIRCADENAS: concatena un rango con separadores personalizados.REDUCEyAPILARV: acumulan resultados de tamaño variable.TEXTOANTESyTEXTODESPUES: extracción quirúrgica por posición.LAMBDArecursiva: el recurso final para grandes volúmenes.
Conclusión
Un mismo obstáculo —la limitación de BYROW— abordado con cinco técnicas que escalan desde lo trivial hasta la recursión con bisección. Es un ejemplo perfecto de cómo en la comunidad de Influexcel una duda concreta se transforma en un catálogo de patrones reutilizables. La próxima vez que BYROW te devuelva un error de cálculo, ya sabes que tienes al menos cinco salidas.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- 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
- 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
- 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
- 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
- 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á
- 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
- Generar un árbol binario completo con una sola fórmula matricial CasoUn miembro de la comunidad plantea un reto fascinante: dado un número central (ej: 1007), generar automáticamente todo el árbol binario con
- Desglose de asientos contables con unpivot y generación automática de contrapartidas CasoInteresante problema planteado por Juan en el grupo: tiene una tabla de asientos contables en formato horizontal (cada fila contiene cuenta,