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
- 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
- Saldo acumulado por mes: tres enfoques (REDUCE+BYROW, PIVOTARPOR+acumulado, MMULT) CasoJuan plantea una pregunta que parece sencilla y se acaba convirtiendo en tres clases magistrales sobre cómo recorrer una matriz mes a mes. T
- Precio más reciente por artículo: REDUCE, AGRUPARPOR y números complejos CasoNuevo reto interesante planteado por Miki: dada una tabla con artículos y sus precios históricos por año (múltiples filas por artículo), obt
- Eliminar valores de una matriz dinámica con tabla de exclusiones y REDUCE CasoJuan tiene una matriz generada con fórmulas de desbordamiento y necesita eliminar ciertos textos (nombres de áreas geográficas como "Área me
- Payback y Payback Descontado en una sola fórmula con BYROW CasoHenry necesitaba calcular el Payback y el Payback Descontado de una inversión, y tenía dos fórmulas separadas con LET + SCAN que funcionaban
- Despivotar una tabla cruzada con fórmulas: SCAN+GROUPBY vs TEXTSPLIT+TOROW CasoUn miembro comparte un fichero con datos en formato tabla cruzada: 4 proyectos en filas, 12 meses en columnas, cada mes con dos sub-columnas
- SUMAR.SI.CONJUNTO en Excel: las 5 dudas más buscadas, resueltas (y por qué no acepta ELEGIRCOLS) TutorialLe pregunté a Copilot cuáles son las 5 dudas que más se buscan sobre la función SUMAR.SI.CONJUNTO y las resuelvo una a una en Excel, cada un
- REDUCE de CERO a PRO TutorialCon REDUCE podrás transformar listas simples en análisis completos y automatizar cálculos que antes parecían imposibles. Si trabajas con dat
- Ordenar meses cronológicamente en PIVOTARPOR CasoProblema clásico con PIVOTARPOR: cuando los meses vienen como texto ("enero", "febrero"...), las columnas se ordenan alfabéticamente en luga
- 5 errores de los canvas interactivos de Copilot en Excel (y cómo evitarlos) TutorialLos canvas interactivos de Copilot en Excel montan un dashboard con una sola frase. Funcionan, pero hay cinco errores que se repiten y casi