Acumular saldo con registros duplicados usando AGRUPARPOR y SCAN

Juan intenta acumular saldos cuando hay registros con la misma clave, pero ni BYROW, ni SCAN, ni AGRUPARPOR por separado le dan el resultado esperado: necesita primero agrupar las entradas por clave sumando sus importes, y luego calcular el saldo acumulado del resultado agrupado.

Con AGRUPARPOR solo (Leo): el primer paso es agrupar y sumar:

``
=AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0)
`

Esto devuelve una tabla con cada clave única y su total. Pero falta el acumulado.

Combinando AGRUPARPOR + SCAN (Miki): la solución completa. Primero agrupa, luego aplica SCAN con SUMA sobre la columna de totales para obtener el saldo acumulado, y une ambas con APILARH:

`
=APILARH(
AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0);
SCAN(; ELEGIRCOLS(AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0); 2); SUMA)
)
`

Leo añade una observación clave: REDUCE devuelve solo el valor final de la acumulación, mientras que SCAN devuelve todos los pasos intermedios. Si necesitas ver el saldo en cada fila (no solo el total final), SCAN` es la función correcta.

El problema: saldo acumulado cuando hay claves repetidas

Juan quería calcular un saldo acumulado, pero con una vuelta de tuerca: en sus datos había registros con la misma clave que primero debían sumarse entre sí. Ni BYROW, ni SCAN, ni AGRUPARPOR por separado le daban el resultado, porque el problema tiene en realidad dos fases: agrupar por clave sumando los importes, y solo después calcular el acumulado sobre ese resultado ya agrupado.

Paso 1: agrupar y sumar (Leo)

Lo primero es consolidar cada clave única con su total:

=AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0)

AGRUPARPOR toma la columna de claves (B8:B12), la de importes (C8:C12) y la función de agregación (SUMA). El resultado es una tabla con cada clave una sola vez y su importe total. Pero aquí falta lo segundo: el acumulado fila a fila.

Paso 2: acumular con SCAN (Miki)

La solución completa encadena el agrupado con un SCAN sobre la columna de totales, y une ambas partes en horizontal:

=APILARH(
    AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0);
    SCAN(; ELEGIRCOLS(AGRUPARPOR(B8:B12; C8:C12; SUMA;; 0); 2); SUMA)
)

La primera parte es la tabla agrupada. La segunda extrae con ELEGIRCOLS(...; 2) la columna de totales y le aplica SCAN con SUMA: eso genera el saldo acumulado, celda a celda, arrastrando la suma de todo lo anterior. APILARH pega la columna de acumulado a la derecha de la tabla agrupada.

SCAN frente a REDUCE: la diferencia que importa

Leo remató con una observación que resuelve muchas dudas: REDUCE devuelve solo el valor final de la acumulación, mientras que SCAN devuelve todos los pasos intermedios. Por eso aquí la función correcta es SCAN: queremos ver el saldo en cada fila, no únicamente el total al final. Si solo necesitaras el gran total, REDUCE bastaría; para un extracto con saldo corriente, SCAN.

Es una distinción sencilla pero decisiva, y confundirlas es una de las causas más habituales de que un acumulado "no salga".

Funciones clave

  • AGRUPARPOR: consolida las filas por clave aplicando una función de agregación (SUMA).
  • SCAN: recorre una columna acumulando y devuelve el resultado en cada paso —el corazón del saldo corriente.
  • ELEGIRCOLS: aísla la columna de totales para acumular solo sobre ella.
  • APILARH: une la tabla agrupada con la columna de acumulado.

Conclusión

Un saldo acumulado con datos "sucios" (claves repetidas) no se resuelve con una sola función, sino encadenando dos ideas: primero agrupar con AGRUPARPOR, luego acumular con SCAN. Y recordar que SCAN guarda los pasos intermedios mientras REDUCE se queda con el final es lo que separa una fórmula que funciona de una que casi funciona. Estas combinaciones son material recurrente en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel