Extraer máximos por clave y calcular tiempo transcurrido: AGRUPARPOR vs fórmulas clásicas
Interesante caso doble que arrancó con una necesidad muy concreta: dada una tabla con columnas Clave, Secuencia y Rev, obtener el máximo de cada columna numérica por cada clave única. Es decir, una agrupación con función de agregado. Lo que en SQL sería un GROUP BY con MAX.
La tabla de datos tenía este aspecto:
| Clave | Secuencia | Rev |
|-------|-----------|-----|
| 2024CEO524 | 6 | 2 |
| 2024CEO524 | 7 | 3 |
| 2024CEO524 | 16 | 5 |
| 2024CEO576 | 1 | 1 |
| 2024CEO576 | 6 | 2 |
| 2024CEO579 | 1 | 1 |
Un miembro de la comunidad sugirió la vía clásica: tabla dinámica. Sin fórmulas, sin complicaciones. Clave en filas, Secuencia y Rev en valores con función MAX. Limpio y directo.
Nacho propuso resolverlo con AGRUPARPOR, la función nativa de Excel 365 pensada exactamente para esto:
``
=AGRUPARPOR(
Datos[[#Todo];[Clave]];
Datos[[#Todo];[Secuencia]:[Rev]];
MAX;
3;
0
)
`
Una sola fórmula que agrupa por la columna Clave, aplica MAX a las columnas Secuencia y Rev, incluye encabezados (argumento 3) y ordena ascendente (argumento 0). El resultado es una tabla limpia con el máximo de cada columna por clave.
Para quienes no tienen Excel 365 (o prefieren compatibilidad con Excel 2021), Gerson aportó una alternativa elegante con LET, UNICOS, ELEGIR y MAX.SI.CONJUNTO:
`
=LET(
c; Tabla1[Clave];
UNICOS(
ELEGIR(
{1,2,3};
c;
MAX.SI.CONJUNTO(Tabla1[Secuencia]; c; c);
MAX.SI.CONJUNTO(Tabla1[Rev]; c; c)
)
)
)
`
La idea es ingeniosa: ELEGIR({1,2,3},...) construye una matriz virtual de 3 columnas (clave, max secuencia, max rev), y UNICOS se encarga de eliminar duplicados por clave. Sin AGRUPARPOR, sin tablas dinámicas, compatible con versiones anteriores.
Aquí no acabó la cosa. Un miembro de la comunidad planteó una extensión del problema: añadir una columna Fecha / Hora a los datos y calcular el tiempo transcurrido (diferencia entre la primera y última fecha) por cada clave. Los datos ahora incluían campos como Condición, Responsable y un timestamp por cada registro, con múltiples entradas por clave a lo largo de semanas.
Gerson propuso usar AGRUPARPOR combinado con APILARH y ENTERO para agrupar por clave y día, calculando la diferencia entre MAX y MIN de las fechas:
`
=AGRUPARPOR(
APILARH(Tabla2[Clave]; ENTERO(Tabla2[Fecha / Hora]));
Tabla2[Fecha / Hora];
LAMBDA(x; MAX(x) - MIN(x));
;
0
)
`
Nacho lo llevó un paso más allá con una fórmula que resuelve todo en un solo bloque: máximos de Secuencia y Rev + tiempo transcurrido formateado como dd:hh:mm, todo combinando EXCLUIR, AGRUPARPOR, APILARH y LAMBDA:
`
=EXCLUIR(
AGRUPARPOR(
Tabla2[[#Todo];[Clave]];
APILARH(
Tabla2[[#Todo];[Secuencia]:[Rev.]];
Tabla2[[#Todo];[Fecha / Hora]]
);
APILARH(
MAX;
MAX;
LAMBDA(x; TEXTO(MAX(x) - MIN(x); "dd:hh:mm"))
);
;
0
);
1
)
`
El truco está en pasar un array de funciones a AGRUPARPOR mediante APILARH: MAX para Secuencia, MAX para Rev, y un LAMBDA personalizado para calcular y formatear la diferencia de fechas. EXCLUIR(…;1) elimina la fila de encabezados autogenerada.
Gerson también preparó una versión más extendida que desglosa inicio, fin, días y horas por separado, usando LET para no repetir cálculos y SINGLE para obtener el primer valor (mínimo cronológico) de cada grupo.
Tres enfoques distintos para un mismo problema, desde la tabla dinámica clásica hasta fórmulas de una sola celda con AGRUPARPOR`. Un buen ejemplo de cómo Excel 365 permite resolver agrupaciones complejas sin salir de la hoja de cálculo.
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)