Sustituir SUMAR.SI.CONJUNTO lento por MMULT y BYCOL en análisis de inventario
Un miembro desde Ecuador tiene un modelo de inventario con SUMAR.SI.CONJUNTO dentro de una fórmula LET con ELEGIRCOLS y FILTRAR. El problema: con miles de filas, la fórmula se vuelve muy lenta. La comunidad propone alternativas matriciales mucho más eficientes.
Con MMULT (Leo): reemplaza SUMAR.SI.CONJUNTO por una multiplicación de matrices. N() convierte la comparación booleana en 0/1, y MMULT hace la suma condicional en una sola operación:
``
=MMULT(
N(_MES = ENFILA(ELEGIRCOLS(_BD; 1)));
ELEGIRCOLS(_BD; 3)
)
`
Con BYCOL (Leo): alternativa que recorre cada columna multiplicando la condición por los valores y sumando:
`
=BYCOL(
(ENFILA(_MES) = ELEGIRCOLS(_BD; 1)) * ELEGIRCOLS(_BD; 3);
SUMA
)
`
Con AGRUPARPOR (Leo): para el caso más simple de agrupar por una sola dimensión:
`
=LET(C; ELEGIRCOLS; AGRUPARPOR(C(_VpOS; 2); C(_VpOS; 8); SUMA;; 0))
`
Leo comparte además el truco de asignar ELEGIRCOLS a una variable C dentro de LET para acortar fórmulas que usan ELEGIRCOLS repetidamente. C(rango; 2; 3) es mucho más legible que repetir ELEGIRCOLS cinco veces.
La clave del rendimiento: MMULT hace toda la suma condicional en una sola operación matricial, mientras que SUMAR.SI.CONJUNTO` evalúa cada combinación de criterios por separado.
El problema: SUMAR.SI.CONJUNTO se arrastra con miles de filas
Un miembro de la comunidad, desde Ecuador, tenía un modelo de inventario montado con SUMAR.SI.CONJUNTO dentro de un LET, combinado con ELEGIRCOLS y FILTRAR. Sobre pocos datos volaba, pero al llegar a miles de filas la hoja se volvía lenta y cada recálculo era una espera. La comunidad propuso reemplazar la suma condicional por álgebra matricial, mucho más eficiente.
Solución 1: MMULT (la más rápida)
Leo sustituye SUMAR.SI.CONJUNTO por una multiplicación de matrices. La idea es convertir la condición (por ejemplo, "el mes coincide") en una matriz de unos y ceros con N(), y multiplicarla por la columna de valores:
=MMULT(
N(_MES = ENFILA(ELEGIRCOLS(_BD; 1)));
ELEGIRCOLS(_BD; 3)
)N() transforma la comparación booleana en 1 y 0, y MMULT hace toda la suma condicional en una sola operación matricial. Ahí está la ganancia: en vez de evaluar cada combinación de criterios por separado, el motor de cálculo resuelve el producto de una vez.
Solución 2: BYCOL
Una alternativa igual de matricial pero quizá más intuitiva. Multiplica la condición por los valores y suma columna a columna:
=BYCOL(
(ENFILA(_MES) = ELEGIRCOLS(_BD; 1)) * ELEGIRCOLS(_BD; 3);
SUMA
)El producto de la matriz booleana por los valores deja pasar solo las filas que cumplen la condición, y BYCOL con SUMA cierra el total por columna.
Solución 3: AGRUPARPOR (para el caso simple)
Cuando solo hay que agrupar por una dimensión, no hace falta nada matricial: AGRUPARPOR lo resuelve directamente y es rapidísimo:
=LET(C; ELEGIRCOLS; AGRUPARPOR(C(_VpOS; 2); C(_VpOS; 8); SUMA;; 0))Truco de legibilidad: alias de ELEGIRCOLS
Leo comparte un detalle muy útil que se ve en la fórmula anterior: asignar ELEGIRCOLS a una variable corta C dentro del LET. Así, en lugar de repetir ELEGIRCOLS cinco veces, escribes C(rango; 2). La fórmula queda mucho más limpia sin perder nada de funcionalidad. Es un patrón estupendo para cualquier fórmula que use la misma función una y otra vez.
Funciones clave
MMULT: resuelve la suma condicional como un único producto de matrices; el rey del rendimiento aquí.N: convierte comparaciones booleanas en 1 y 0 para poder multiplicarlas.ENFILA: prepara los criterios en horizontal para el cruce matricial.BYCOL: alternativa que suma columna a columna.AGRUPARPOR: la vía directa cuando basta con agrupar por una dimensión.
Conclusión
Cuando una fórmula de agregación se atasca con volumen, muchas veces el problema no es Excel, sino el enfoque. SUMAR.SI.CONJUNTO evalúa criterio a criterio; MMULT reduce todo a una operación de matrices que el motor calcula de golpe. Cambiar de mentalidad —de "sumar si cumple" a "multiplicar matrices"— es lo que convierte una hoja lenta en una instantánea. Justo el tipo de salto que la comunidad de Influexcel te ayuda a dar.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- 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
- SUMAR.SI.CONJUNTO con referencias de celda en los criterios de fecha CasoUn miembro de la comunidad tiene una fórmula SUMAR.SI.CONJUNTO que funciona perfectamente con fechas escritas directamente, pero no consigue
- Utiliza slicers con la función SUMAR.SI.CONJUNTO TutorialUtilizar slicers en cálculos sin tablas dinámicas y mejora la usabilidad de tus informes
- Calcular porcentajes de mora por sucursal con BYROW, BYCOL y MMULT CasoEzequiel Rivera lanza un reto a la comunidad: dada una tabla de importes de mora por sucursal (filas) y tramo de antigüedad (columnas), calc
- Por qué SUMAR.SI falla al arrastrar y cómo resolverlo con AGRUPARPOR CasoUn miembro de la comunidad comparte un archivo con datos de nóminas de varias empresas (cantidad, salario base, bonificación, vacaciones, de
- 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
- Agrupar y sumar columnas específicas con AGRUPARPOR y ELEGIRCOLS CasoUn miembro de la comunidad necesita agrupar datos de una hoja de seguimiento y sumar solo determinadas columnas, sin incluir todas las del r
- Filtrar columnas que contienen negativos con BYCOL y N() CasoJuan plantea cómo detectar valores negativos en una matriz numérica. Conoce HALLAR para buscar texto, pero no encuentra el equivalente para
- Resumen mensual con AGRUPARPOR en una sola fórmula y orden cronológico CasoJosé escribe desde Lima con una consulta muy práctica: tiene una tabla de movimientos financieros con fechas y valores, y quiere generar un
- Formato dinámico AGRUPARPOR PIVOTARPOR TutorialAplicar formato condicional a las matrices calculadas es fundamental para conseguir que su legibilidad sea óptima