Explicaré hoy una forma de obtener los tres mejores tiempo en una carreara para cada grupo de edad; con ello trataré de contestar la cuestión planteada en un comentario por un lector:
Trabajaremos en esta ocasión con una función ya conocida, la función K.ESIMO.MAYOR, pero en un formato matricial (Ctrl+Mayusc+Enter).
Pongamos un ejemplo de una tabla de resultados de una carrera, en el que se intercalan por orden de llegada los diferentes participantes, cada uno correspondiente a una categoría o grupo de edad (alevín, cadete y veterano):
Buscamos completar la siguiente tabla de posiciones para cada 'categoría':
La solución nos la dará combinar o anidar la función K.ESIMO.MAYOR con una función de conteo como es CONTAR.SI, todo ello en ejecutada en forma matricial (Ctrl+Mayusc+Enter):
{=K.ESIMO.MAYOR((Categoria=J$2)*(Tiempo);CONTAR.SI(Categoria;J$2)+1-$I3)}
para trabajar de manera más cómoda, previamente habremos asignado nombres a los diferentes campos de nuestra tabla de tiempos, siendo:
Categoria ='Hoja1'!$A$2:$A$16
Nombre ='Hoja1'!$B$2:$B$16
Tiempo ='Hoja1'!$C$2:$C$16
La explicación la podemos visualizar si en columnas auxiliares ejecutamos las diferentes órdenes:
En primer lugar, incluimos la fórmula:
=Categoria=J$2
que de manera individual, equivaldría para cada elemento del rango 'Categoria', chequear si es igual al valor de la celda J2, esto es, igual a la categoría concreta a evaluar (J2 = 'cadete'):
por supuesto, igual funcionaría para el resto de 'Categorías' a evaluar.
La segunda operación resulta de multiplicar el resultado de la fórmula anterior (VERDADERO =1 ó FALSO =0) por el tiempo realizado por el participante; que en su forma matricial vendría dado por:
(Categoria=J$2)*(Tiempo)
pero que en forma individual, sería:
Con esta operación obtenemos un rango sólo con los tiempos de la categoría a estudio; ahora únicamente tenemos que escoger los tres mejores tiempos; que conseguiremos aplicando con imaginación la función CONTAR.SI
Será con esta función CONTAR.SI con la que completaremos el segundo argumento, el de posición, de la función K.ESIMO.MAYOR.
=CONTAR.SI(Categoria;J$2)
obtendremos el número total de participantes de cada categoría, pero al pensarlo detenidamente también es el orden de posición último, contado de mayor a menor. No olvidemos que buscamos el menor tiempo, es decir, ordenado de mayor a menor, para un grupo de 5 participantes, el de mejor tiempo es el quinto mayor; el segundo será el cuarto en esta ordenación descendente y el mejor tiempo, para nuestro ejemplo el tercero.
Como queremos automatizar esas posiciones, aprovecharemos que en nuestra tabla de 'Posiciones' tenemos definidas las posiciones deseadas, y por tanto dejaremos nuestro argumento definido como:
CONTAR.SI(Categoria;J$2)+1-$I3
Acabamos obteniendo como resultado la función completa ya comentada:
{=K.ESIMO.MAYOR((Categoria=J$2)*(Tiempo);CONTAR.SI(Categoria;J$2)+1-$I3)
...¿cómo podríamos identificar los 3 primeros, no sólo el máximo? ejemplo... tabla con tiempos de una carrera pero cada corredor es de una categoría, los tres primeros veteranos, cadetes... etc. etc. sin utilizar tablas dinámicas... |
Trabajaremos en esta ocasión con una función ya conocida, la función K.ESIMO.MAYOR, pero en un formato matricial (Ctrl+Mayusc+Enter).
Pongamos un ejemplo de una tabla de resultados de una carrera, en el que se intercalan por orden de llegada los diferentes participantes, cada uno correspondiente a una categoría o grupo de edad (alevín, cadete y veterano):
Buscamos completar la siguiente tabla de posiciones para cada 'categoría':
La solución nos la dará combinar o anidar la función K.ESIMO.MAYOR con una función de conteo como es CONTAR.SI, todo ello en ejecutada en forma matricial (Ctrl+Mayusc+Enter):
{=K.ESIMO.MAYOR((Categoria=J$2)*(Tiempo);CONTAR.SI(Categoria;J$2)+1-$I3)}
para trabajar de manera más cómoda, previamente habremos asignado nombres a los diferentes campos de nuestra tabla de tiempos, siendo:
Categoria ='Hoja1'!$A$2:$A$16
Nombre ='Hoja1'!$B$2:$B$16
Tiempo ='Hoja1'!$C$2:$C$16
La explicación la podemos visualizar si en columnas auxiliares ejecutamos las diferentes órdenes:
En primer lugar, incluimos la fórmula:
=Categoria=J$2
que de manera individual, equivaldría para cada elemento del rango 'Categoria', chequear si es igual al valor de la celda J2, esto es, igual a la categoría concreta a evaluar (J2 = 'cadete'):
por supuesto, igual funcionaría para el resto de 'Categorías' a evaluar.
La segunda operación resulta de multiplicar el resultado de la fórmula anterior (VERDADERO =1 ó FALSO =0) por el tiempo realizado por el participante; que en su forma matricial vendría dado por:
(Categoria=J$2)*(Tiempo)
pero que en forma individual, sería:
Con esta operación obtenemos un rango sólo con los tiempos de la categoría a estudio; ahora únicamente tenemos que escoger los tres mejores tiempos; que conseguiremos aplicando con imaginación la función CONTAR.SI
Será con esta función CONTAR.SI con la que completaremos el segundo argumento, el de posición, de la función K.ESIMO.MAYOR.
=CONTAR.SI(Categoria;J$2)
obtendremos el número total de participantes de cada categoría, pero al pensarlo detenidamente también es el orden de posición último, contado de mayor a menor. No olvidemos que buscamos el menor tiempo, es decir, ordenado de mayor a menor, para un grupo de 5 participantes, el de mejor tiempo es el quinto mayor; el segundo será el cuarto en esta ordenación descendente y el mejor tiempo, para nuestro ejemplo el tercero.
Como queremos automatizar esas posiciones, aprovecharemos que en nuestra tabla de 'Posiciones' tenemos definidas las posiciones deseadas, y por tanto dejaremos nuestro argumento definido como:
CONTAR.SI(Categoria;J$2)+1-$I3
Acabamos obteniendo como resultado la función completa ya comentada:
{=K.ESIMO.MAYOR((Categoria=J$2)*(Tiempo);CONTAR.SI(Categoria;J$2)+1-$I3)
muy bien!
ResponderEliminar