La función AGRUPARPOR en Excel permite agrupar, agregar y ordenar los datos de un rango o matriz basándose en los valores de una o más columnas. Es una función de matriz dinámica muy potente y flexible, ideal para crear informes de resumen que tradicionalmente requerirían el uso de tablas dinámicas o fórmulas complejas.
Esta función genera una nueva tabla de resultados que se «derrama» (spills) automáticamente en las celdas adyacentes, resumiendo la información según los criterios especificados.
Sintaxis
=AGRUPARPOR(campos_fila; valores; función; [encabezados_campo]; [profundidad_total]; [orden]; [matriz_filtro])
La función AGRUPARPOR tiene los siguientes argumentos:
- campos_fila: El rango de columnas por el que se desea agrupar. No puede incluir la columna de valores. Obligatorio.
- valores: La columna (o columnas) de datos numéricos que se van a agregar. Obligatorio.
- función: La función que se usará para la agregación. Puede ser una función de agregación estándar (como SUMA, PROMEDIO, CONTARA) o una función LAMBDA para cálculos personalizados. Obligatorio.
- encabezados_campo: Especifica si los rangos de entrada tienen encabezados y si estos deben mostrarse en el resultado. Opcional.
- 0 (o se omite): No hay encabezados.
- 1: Sí, y no se muestran en el resultado.
- 2: No, pero se generan automáticamente.
- 3: Sí, y se muestran en el resultado.
- profundidad_total: Define si se deben añadir filas de totales y subtotales al resultado. Opcional.
- 0 (o se omite): Sin totales.
- 1: Con totales generales.
- 2: Con totales generales y subtotales.
- -1: Totales generales en la parte superior.
- -2: Totales generales y subtotales en la parte superior.
- orden: Indica cómo ordenar los resultados. Puede ser un número único o una matriz de números que se corresponden con las columnas del resultado. Un número positivo ordena de forma ascendente y uno negativo de forma descendente. Opcional.
- matriz_filtro: Una matriz booleana (VERDADERO/FALSO) del mismo tamaño que `campos_fila` para filtrar los datos antes de la agrupación. Solo se incluirán las filas donde el valor sea VERDADERO. Opcional.
Ejemplos
Para los siguientes ejemplos, usaremos la tabla de datos de ventas:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Región | Producto | Vendedor | Ventas |
| 2 | Norte | Portátil | Ana | 1200 |
| 3 | Sur | Monitor | Luis | 350 |
| 4 | Norte | Teclado | Ana | 80 |
| 5 | Norte | Portátil | Carlos | 1150 |
| 6 | Sur | Portátil | Luis | 1300 |
| 7 | Este | Monitor | Sara | 400 |
| 8 | Norte | Teclado | Carlos | 95 |
Ejemplo 1: Agrupar ventas totales por Región
Esta fórmula agrupa los datos por la columna «Región» (A2:A8) y suma las «Ventas» (D2:D8) correspondientes a cada región.
=AGRUPARPOR(A2:A8; D2:D8; SUMA)
Resultado:
| Norte | 2525 |
| Sur | 1650 |
| Este | 400 |
Ejemplo 2: Agrupar por Región y Producto con Totales y Subtotales
Aquí agrupamos por dos columnas («Región» y «Producto»), calculamos el promedio de ventas, incluimos los encabezados en el resultado y añadimos totales generales y subtotales.
=AGRUPARPOR(A2:B8; D2:D8; PROMEDIO; 3; 2)
Resultado:
| Región | Producto | PROMEDIO de Ventas |
|---|---|---|
| Norte | Portátil | 1175 |
| Teclado | 87.5 | |
| Total Norte | 631.25 | |
| Sur | Monitor | 350 |
| Portátil | 1300 | |
| Total Sur | 825 | |
| Este | Monitor | 400 |
| Total Este | 400 | |
| Total general | 682.14 |
Ejemplo 3: Agrupar por Vendedor y filtrar ventas mayores a 100
Esta fórmula agrupa las ventas por vendedor, pero antes filtra los datos para incluir únicamente las ventas que superan los 100€. Además, ordena el resultado por el total de ventas de forma descendente.
=AGRUPARPOR(C2:C8; D2:D8; SUMA; 3; 1; -2; D2:D8>100)
Resultado:
| Vendedor | SUMA de Ventas |
|---|---|
| Total general | 4400 |
| Luis | 1650 |
| Ana | 1200 |
| Carlos | 1150 |
| Sara | 400 |
Observaciones
AGRUPARPOR es una función de matriz dinámica. Esto significa que si el resultado ocupa más de una celda, se «derramará» automáticamente a las celdas adyacentes. Asegúrate de que haya suficientes celdas vacías para evitar un error de #¡DESBORDAMIENTO!.
Errores comunes
- #¡CALC!: Ocurre si la `matriz_filtro` no devuelve ningún resultado (todas las filas se filtran) o si los rangos proporcionados están vacíos.
- #¡VALOR!: Suele aparecer si el argumento `orden` es incorrecto (por ejemplo, un número de columna que no existe en el resultado).
- #¡DESBORDAMIENTO!: Se produce si no hay suficientes celdas vacías para mostrar todos los resultados de la matriz.
- #NOMBRE?: Ocurre si el texto proporcionado en el argumento `función` no se reconoce como una función válida.
Disponibilidad por versión de Excel
La función AGRUPARPOR está disponible para los suscriptores de Microsoft 365. Se ha ido implementando de forma gradual, por lo que podría no estar disponible en todas las versiones o canales de actualización.
Compatibilidad
| Software | Compatibilidad | Notas | Alternativa |
|---|---|---|---|
| Microsoft Excel | ✔️ | Disponible en versiones recientes de Microsoft 365. | — |
| Google Sheets | ❌ | No existe una función equivalente directa. | Función QUERY con la cláusula GROUP BY. |
| LibreOffice Calc | ❌ | La funcionalidad se puede replicar con tablas dinámicas (Data Pilot). | Tablas Dinámicas |
| OpenOffice Calc | ❌ | La funcionalidad se puede replicar con tablas dinámicas. | Tablas Dinámicas |
| WPS Office Spreadsheets | ❌ | No confirmado, pero es muy improbable que esté disponible. | Tablas Dinámicas |
| Apple Numbers | ❌ | No existe una función equivalente directa. | Función de Categorías o tablas dinámicas. |
Funciones Relacionadas
- DINAMIZARPOR: Similar a AGRUPARPOR, pero permite crear resúmenes en formato de tabla de doble entrada (filas y columnas).
- SUMAR.SI.CONJUNTO: Suma celdas que cumplen múltiples criterios. Es una alternativa clásica para agregaciones condicionales simples.
- FILTRAR: Permite filtrar un rango de datos basándose en criterios definidos. Útil para preparar los datos antes de agruparlos.
- LAMBDA: Permite crear funciones personalizadas que pueden ser usadas en el argumento `función` de AGRUPARPOR para realizar cálculos de agregación complejos.
