jueves, 4 de agosto de 2016

Obtener posición dentro de un rango según condición

Un lector preguntaba por la manera de obtener, mediante fórmulas, la posición según orden ascendente de diferentes valores, condicionados a un segundo elemento:



Observemos la fórmula matricial empleada para cada celda del rango C2:C18 (recuerda ejecutarla presionando Ctrl+Mayusc+Enter):
=COINCIDIR(B2;K.ESIMO.MENOR(SI($A$2:$A$18=A2;$B$2:$B$18);FILA($A$2:$A$18)-1);0)


¿Cómo funciona esta matricial?.

Empecemos con lo primero importante que es la condición del 'Producto':
SI($A$2:$A$18=A2;$B$2:$B$18)
matricialmente ejecutada esto nos devuelve la siguiente matriz:
{10000;20000;30000;50000;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO}
así solo trabajaremos sobre los valores correspondientes al producto que nos interesa.


Al aplicar la función K.ESIMO.MENOR sobre estos valores obtendremos los datos ordenados de menor a mayor (en sentido ascendente):
K.ESIMO.MENOR(SI($A$2:$A$18=A2;$B$2:$B$18);FILA($A$2:$A$18)-1)
la matriz modificada:
{10000;20000;30000;50000;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!;#¡NUM!}


Finalmente con COINCIDIR del valor de la fila sobre el rango ordenado obtenemos la posición absoluta que ocupa este dato.

Como se puede probar da igual el orden en que aparezcan los valores, esta fórmula trabajará siempre correctamente.

Obtener posición dentro de un rango según condición

No hay comentarios:

Publicar un comentario en la entrada