Buenas tardes.
Hace unos días me enfrenté a la necesidad de
calcular el promedio de los "k" mayores valores de un listado, con la dificultad añadida de que podían existir
valores duplicados en dicho listado.
Comento lo de dificultad añadida porque la
primera idea que tuve para solucionarlo, aplicando algo tan sencillo como:
=SUMAR.SI(B3:B12;">="&K.ESIMO.MAYOR(B3:B12;$B$14))/$B$14,
donde "$B$14" hace referencia al número de valores a considerar para el promedio, resultó un fracaso. Al realizar pruebas, pude comprobar que cuando el k-ésimo valor era idéntico al k-ésimo +1 (pudiendo ser
igual, a su vez, al k-ésimo +2, etc.) el promedio consideraba, respectivamente, k+1, k+2, etc. valores, proporcionando así
resultados distintos de los deseados.
Pese a esto, tuve la suerte de encontrar una publicación -que agradezco enormemente- en donde figuraba una
expresión que, debidamente modificada, funciona a la perfección:
=SUMAPRODUCTO(K.ESIMO.MAYOR(B3:B12;FILA(INDIRECTO(CONCAT("1:";$B$14)))))/$B$14
Con el problema resuelto, sin embargo, mi curiosidad me ha llevado a
intentar comprender en profundidad el funcionamiento de la expresión, algo que no he conseguido y por lo que
solicito la ayuda de la comunidad.
Si bien es cierto que las funciones empleadas en la expresión no me resultan ajenas, ni mucho menos, también lo es el que en este caso se emplean de formas que desconocía y no termino de comprender. Al intentar
desgranarla, de esta forma, me he encontrado con las siguientes cuestiones:
Nota: En lo que sigue, obviaré conscientemente tanto la referencia absoluta al número de valores sobre los que la expresión calcula el promedio
como el empleo de la función CONCATenar, ya que corresponden a modificaciones que realicé sobre la expresión original para adaptarla a mis necesidades y, además, considero que carecen de relevancia.
- La función CONCATenar, de forma aislada, devuelve explícitamente "1:k", donde "k" corresponde al número de valores sobre los que realizar el promedio. Es decir, el tipo de resultado que arrojaría
sería, por poner un ejemplo numérico, "1:5".
2) La función INDIRECTO, aplicada -de nuevo de forma aislada- sobre la anterior, proporciona directamente un error, algo que no me extraña puesto que la referencia que recibe se encuentra, hasta donde yo sé, incompleta. Aquí es donde comienzan mis dudas,
ya que la función INDIRECTO devuelve una referencia especificada por un valor de texto y no entiendo qué referencia está devolviendo en realidad (al margen del error que para mí es natural debido a los datos que recibe de entrada).
3) Pese a este error mencionado -y para mi sorpresa-, la función
FILA, la cual devuelve el número de fila de una referencia, aplicada sobre lo anterior proporciona el resultado "1"; siempre el mismo y, aparentemente, independiente del valor "k".
4) Lo anterior, una vez más, me descoloca, ya que, partiendo de un supuesto error, la función
K.ESIMO.MAYOR, que devuelve el valor k-ésimo mayor de un conjunto de datos, aplicada sobre esta función
FILA, arroja un único resultado, que para mí no tiene sentido -si se me perdona la ignorancia-.
5 ) Finalmente, la aplicación de la función
SUMAPRODUCTO, la cual devuelve la suma de los productos de rangos o matrices correspondientes, sobre un único argumento, tal y como se emplea en este caso, me resulta totalmente opaca -no he encontrado nada sobre su aplicación
de este modo en la ayuda de Excel-.
La cuestión, no obstante, más allá de mi comprensión, es que la expresión funciona a la perfección para su propósito... Así que, con todo lo anterior, agradeceré cualquier aclaración al respecto que me pueda
proporcionar la comunidad.
Un saludo.