Calcular porcentajes de mora por sucursal con BYROW, BYCOL y MMULT
Ezequiel Rivera lanza un reto a la comunidad: dada una tabla de importes de mora por sucursal (filas) y tramo de antigüedad (columnas), calcular el porcentaje que representa cada celda respecto al total de su fila, e incluir una fila de totales con los porcentajes por columna.
John resuelve de forma compacta con BYROW y BYCOL:
``
=LET(
r; C4:H14;
s; SUMA;
APILARV(r / BYROW(r; s); BYCOL(r; s) / s(r))
)
`
Cada fila se divide entre su suma (BYROW(r;SUMA) genera un vector columna con los totales por sucursal), y la última fila se calcula dividiendo la suma por columna entre el gran total. Un detalle elegante: almacenar SUMA en la variable s permite usarla como función (BYROW(r;s)) y como llamada directa (s(r)).
Leo aporta una alternativa con MMULT que evita LAMBDA por completo:
`
=LET(
m; C4:H14;
m / MMULT(m; SECUENCIA(COLUMNAS(m))^0)
)
`
El truco es multiplicar la matriz por un vector columna de unos (SECUENCIA(n)^0), que equivale a sumar cada fila. Leo reconoce que su versión no incluye la fila de totales, que en la de John se añade con APILARV.
La discusión también toca el tema de "ETA LAMBDA": en versiones Beta de Excel 365, se puede escribir BYROW(m;SUMA) directamente sin envolver en LAMBDA. En la versión estable actual todavía requiere BYROW(m;LAMBDA(x;SUMA(x)))`.
Porcentajes por fila y por columna en una sola fórmula
Ezequiel Rivera retó a la comunidad con un clásico de los informes: dada una tabla de importes de mora por sucursal (filas) y tramo de antigüedad (columnas), calcular qué porcentaje representa cada celda sobre el total de su fila, y añadir una fila final con los porcentajes por columna. Dos soluciones muy limpias aparecieron enseguida.
La versión de John: BYROW y BYCOL
`` =LET( r; C4:H14; s; SUMA; APILARV(r / BYROW(r; s); BYCOL(r; s) / s(r)) ) ``
Cada fila se divide entre su propia suma: BYROW(r; SUMA) genera un vector columna con el total de cada sucursal, y al dividir r entre ese vector obtienes el peso de cada celda dentro de su fila. La última fila se calcula dividiendo la suma por columna entre el gran total, y APILARV la pega debajo.
Hay un detalle precioso: John guarda SUMA en la variable s y luego la usa de dos maneras, como función que se pasa a BYROW (BYROW(r; s)) y como llamada directa (s(r)). Tratar una función como un valor más es una de las ideas potentes del Excel moderno.
La versión de Leo: MMULT sin LAMBDA
`` =LET( m; C4:H14; m / MMULT(m; SECUENCIA(COLUMNAS(m))^0) ) ``
Aquí el truco es multiplicar la matriz por un vector columna de unos. SECUENCIA(COLUMNAS(m)) da un vector con tantos elementos como columnas, y elevarlo a cero lo convierte en unos. MMULT de la matriz por ese vector equivale a sumar cada fila, así que al dividir obtienes los porcentajes por fila sin usar BYROW ni LAMBDA. Leo reconoce que su versión no añade la fila de totales, que en la de John llega con APILARV.
El apunte sobre ETA LAMBDA
La conversación tocó un tema fino: en versiones beta de Excel 365 ya puedes escribir BYROW(m; SUMA) directamente, pasando la función por su nombre. En la versión estable actual todavía hay que envolverla: BYROW(m; LAMBDA(x; SUMA(x))). Bueno saberlo si una fórmula que ves por ahí no te funciona igual.
Funciones clave
BYROWyBYCOL: aplican una función de agregación fila a fila y columna a columna.MMULTcon un vector de unos: suma cada fila sin recorrerla explícitamente.SECUENCIA(n)^0: forma compacta de generar un vector de unos del tamaño justo.APILARV: añade la fila de totales por columna debajo del bloque principal.
Conclusión
Dos caminos con personalidad propia: John apuesta por la claridad de BYROW/BYCOL y guarda la función en una variable; Leo tira de álgebra matricial con MMULT para esquivar LAMBDA por completo. Los dos resuelven el mismo informe de mora en una sola celda. Este ida y vuelta de enfoques es lo que hace que aprender en la comunidad de InflueXcel enganche tanto.
Más contenido de Excel en InflueXcel
- Cuenta clientes y cervezas en Excel 🍺 Caso "La Taberna: El Poney Pisador" (Nivel 1) Tutorial🍺 Noche cerrada en Bree. Frodo, Sam, Merry y Pippin cruzan la puerta de El Poney Pisador huyendo de los Jinetes Negros: la sala está a reven
- SUMAR.SI.CONJUNTO en acción con El Señor de los Anillos 🃏 El 21 de La Comarca TutorialLo que practicamos en este caso: • Contar cartas por palo con CONTAR.SI • Sumar valores con condiciones (SUMAR.SI / SUMAR.SI.CONJUNTO) • Apl
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Reorganizar tablas mensuales: cruzar por persona buscando en vertical y en horizontal CasoNuevo caso interesante de la comunidad. Juan tenía varias tablas mensuales (a veces más de una en el mismo mes) y quería reorganizarlas por
- Un dato de todas las hojas, escrito una sola vez CasoEsta semana surgió en la comunidad un reto muy habitual cuando un libro tiene muchas hojas: mostrar el valor de la celda B3 de cada hoja, in
- Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados CasoEsta semana surgió en la comunidad un pequeño "expediente X". Un miembro llegó tras ver un vídeo con una idea clara en la cabeza: montar una
- Reformatear un código alfanumérico al teclear: de NN1234567 a NN-12345-67 CasoEsta semana surgió en la comunidad una duda muy práctica: cómo conseguir que al escribir un código tipo NN1234567 (dos letras seguidas de si
- Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque CasoInteresante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10)