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