jueves, 9 de abril de 2020

Promedio de 3 mayores con AGREGAR

Hace algunas semanas un lector habitual me preguntaba por la manera de conseguir un promedio condicionado solo de las tres notas más altas:
[...]A ver si me puedes ayudar con esto que en teoría deberia se fácil pero no logro dar con la formula. He simplificado el ejemplo para que sea mas claro. Se trata de hallar el promedio de las 3 mejores notas de cada clase. [...]

Solución que el mismo aportaba posteriormente.


Nuestros datos...

Promedio de 3 mayores con AGREGAR



Me interesa especialmente una de las múltiples posibilidades expuestas en la imagen, donde se emplea la función AGREGAR (ya vimos un ejemplo en el blog).
=AGREGAR(núm_función; opciones; ref1; [ref2]; …)

Esta función poco conocida devuelve un agregado de una lista o rango, empleando algunas de las funciones más habituales según la siguiente codificación:
1-PROMEDIO
2-CONTAR
3-CONTARA
4-MAX
5-MIN
6-PRODUCTO
7-DESVEST.M
8-DESVEST.P
9-SUMA
10-VAR.M
11-VAR.P
12-MEDIANA
13-MODA.UNO
14-K.ESIMO.MAYOR
15-K.ESIMO.MENOR
16-PERCENTIL.INC
17-CUARTIL.INC
18-PERCENTIL.EXC
19-QUARTILCUARTIL.EXC

Las opciones disponibles:
0 u omitido Omitir funciones AGREGAR y SUBTOTALES anidadas
1-Omitir filas ocultas y funciones AGREGAR y SUBTOTALES anidadas
2-Omitir valores de error y funciones AGREGAR y SUBTOTALES anidadas
3-Omitir filas ocultas, valores de error y funciones AGREGAR y SUBTOTALES anidadas
4-No omitir nada
5-Omitir filas ocultas
6-Omitir valores de error
7-Omitir filas ocultas y valores de error.

Una advertencia!!, la función AGREGAR está diseñada para columnas de datos o rangos verticales!!, no está diseñada para filas de datos ni para rangos horizontales.


Comentadas las opciones de los argumentos de AGREGAR veamos una solución al problema expuesto.
Sabiendo que nuestros datos están en el rango A1:C12, según la imagen de más arriba.

Una primera respuesta:
=PROMEDIO(SI(($B$2:$B$12=$E4)*($C$2:$C$12>=AGREGAR(14;6;$C$2:$C$12/($B$2:$B$12=$E4);3));$C$2:$C$12))

donde AGREGAR llama a la función 14-K.ESIMO.MAYOR,
con una opción 6-Omitir valores de error,
que opera sobre el cociente $C$2:$C$12/($B$2:$B$12=$E4), de ahí la opción de 'Omitir valores de error'
(cociente matricial que devolvería para el curso 1º la matriz {7;#¡DIV/0!;#¡DIV/0!;5;4;#¡DIV/0!;#¡DIV/0!;#¡DIV/0!;8;#¡DIV/0!;4})
y finalmente trabaja solo sobre los 3 valores más altos.
Con esto conseguimos determinar cuál es el tercer valor más alto solo de los datos del primer curso!!

El resto de nuestra fórmula opera matricialmente sobre las condiciones necesarias... que en definitiva son dos:
1-datos del curso deseado
2-promedio de las tres notas más altas entre las del curso.


Otra opción no matricial sería emplear PROMEDIO.SI.CONJUNTO y AGREGAR:
=PROMEDIO.SI.CONJUNTO($C$2:$C$12;$B$2:$B$12;E14;$C$2:$C$12;">="&AGREGAR(14;6;$C$2:$C$12/($B$2:$B$12=E14);3))

con igual resultado y similar interpretación.


De forma similar, y empleando directamente la función K.ESIMO.MAYOR:
=PROMEDIO(SI($B$2:$B$12=E9;SI($C$2:$C$12>=K.ESIMO.MAYOR(SI($B$2:$B$12=E9;$C$2:$C$12;0);3);$C$2:$C$12)))

O una última... donde insertamos una función desbordada como FILTRAR
=PROMEDIO(SI($B$2:$B$12=E14;SI($C$2:$C$12>=K.ESIMO.MAYOR(FILTRAR($C$2:$C$12;$B$2:$B$12=$E14);3);$C$2:$C$12)))


Opción 5 (añadida al post posteriormente)
La siguiente fórmula ejecutada matricialmente:
=PROMEDIO(K.ESIMO.MAYOR(SI($B$2:$B$12=E24;$C$2:$C$12);{1;2;3}))

Promedio de 3 mayores con AGREGAR


Seguro que existen muchas más opciones para dar solución al problema, pero el uso de AGREGAR aporta un punto diferente...

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.