Ordenar según frecuencia
- Jaime Franco Jimenez
- 6 may 2023
- 2 Min. de lectura
Veamos otro desafío de Excel BI, dicho desafío consiste en ordenar desde la Col 1 a Col 5 en función de la frecuencia, la frecuencia más alta se ordenará primero, en caso de igual frecuencia, el número mayor se ordenará primero.

Aquí tenemos los datos con los que vamos a trabajar.

Vamos a usar la función CONTAR.SI, donde como argumento rango de criterio, y, criterio, seleccionamos el rango A1:A8, los valores de Col 1.
=CONTAR.SI(A2:A8;A2:A8)
Aceptamos, y, tenemos una matriz desbordada con la frecuencia, o, repetición de cada número.

Vemos que el numero 3 aparece tres veces, el numero 8 aparece dos veces, y, el numero 4, y, 5 aparece una sola vez.
Usamos APILARH, donde como argumento matriz1, seleccionamos desde A2 a A8, como argumento matriz2, es la función CONTAR.SI.
Cerramos paréntesis.
=APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8))
Aceptamos, y, tenemos una matriz desbordada de dos columnas, en la primera columna, tenemos los valores de Col 1, y, en la segunda columna, tenemos las repeticiones, o, frecuencia.

Ordenamos la función APILARH, por la primera columna, de manera descendente.
=ORDENAR(APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8));1;-1)
Ahora, tenemos los números ordenados de mayor a menor, pero aún no hemos finalizado.

Debemos de ordenar por la frecuencia mas alta, para ello, para ello, ordenamos la expresión anterior por la segunda columna, de manera descendente.
=ORDENAR(ORDENAR(APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8));1;-1);2;-1)
Aceptamos, y, ya lo tenemos.
Nos quedamos con la primera columna, para ello, usamos INDICE, como argumento matriz es la función ORDENAR, omitimos el argumento numero de fila, y, como argumento numero de columna, ponemos 1.
=INDICE(ORDENAR(ORDENAR(APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8));1;-1);2;-1);;1)
Aceptamos, y, arrastramos hacia la derecha, y, ya tenemos nuestro desafío resuelto.

Según la solución de Excel BI, en vez de cero, aparece blanco, para ello, usamos LET, declaramos una variable, y, almacenamos la expresión anterior.
=LET(a;INDICE(ORDENAR(ORDENAR(APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8));1;-1);2;-1);;1)
Como argumento calculo, preguntamos si la variable A es igual a cero, que ponga un texto en blanco, en caso contrario, que devuelva la variable A.
=LET(a;INDICE(ORDENAR(ORDENAR(APILARH(A2:A8;CONTAR.SI(A2:A8;A2:A8));1;-1);2;-1);;1);SI(a=0;"";a))
Ahora, si, tenemos nuestro desafío resuelto.
Miguel Angel Franco
Comments