ORDENARPOR ordena el contenido de un rango o matriz en función de los valores de un rango o matriz correspondiente.
Esta función está actualmente disponible para los suscriptores de Office 365 en el canal mensual. Estará disponible para los suscriptores de Office 365 en el canal semianual a partir de julio del 2020.
Sintaxis
= SORTBY (matriz, by_array1, [sort_order1], [by_array2, sort_order2],...)
· Matriz. Argumento requerido. Matriz para ordenar.
· By_arra1. Argumento requerido, Matriz en donde ordenar.
· [sort_order1]. Argumento opcional. Orden que utilizar.
1. 1 – ascendente
2. -1 – Descendente
Valor predeterminado es ascendente (1).
· [by_array2]. Argumento opcional. Matriz en donde ordenar.
· [sort_order2]. Argumento opcional. Orden que utilizar.
1. 1 – ascendente
2. -1 – Descendente
Valor predeterminado es ascendente (1).
Una matriz puede considerarse como una fila de valores, una columna de valores o una combinación de filas y columnas de valores.
La función ORDENARPOR devolverá una matriz, que se desbordará si es el resultado final de una fórmula. Esto significa que Excel creará de forma dinámica el rango de matriz del tamaño adecuado al presionar ENTRAR. Si los datos de soporte están en una Tabla de Excel, la matriz cambiará de tamaño automáticamente al agregar o eliminar datos del rango de la matriz si usa Referencias estructuradas.
Cuando se crea una tabla de Excel, Excel asigna un nombre a la tabla y a cada encabezado de columna de la tabla. Cuando se agregan fórmulas a una tabla de Excel, estos nombres pueden aparecer automáticamente a medida que se escribe la fórmula y se seleccionan las referencias de celda en la tabla en lugar de especificarlas manualmente. Dicha combinación de nombres de tabla y columna se denomina una referencia estructurada.
Veamos un ejemplo, tenemos una lista de nombres, con sus edades, y, vamos a ordenar por edad, de manera descendente.
Usamos la siguiente formula:
=ORDENARPOR(EJEMPLO1!$A$5:$B$9;EJEMPLO1!$B$5:$B$9;-1)
El resultado será, la misma matriz, pero ordenada por edades de mayor a menor, porque en el argumento por matriz, hemos seleccionado la columna de edades.
Ahora, tenemos la siguiente matriz de datos, donde tenemos la región, el nombre, y, la edad.
Vamos a ordenar por región en orden ascendente, y, después por edad en orden descendente.
Escribimos el signo igual, seguido del nombre de la función, y, abrimos un paréntesis.
=ORDENARPOR(
Como argumento matriz, seleccionamos todo el rango.
=ORDENARPOR(EJEMPLO2!$A$6:$C$13;
Como argumento por matriz1, seleccionamos la columna de región.
=ORDENARPOR(EJEMPLO2!$A$6:$C$13;EJEMPLO2!$A$6:$A$13;
Como argumento orden1, ponemos el número 1, es decir, orden ascendente.
=ORDENARPOR(EJEMPLO2!$A$6:$C$13;EJEMPLO2!$A$6:$A$13;1;
Como argumento por matriz2, seleccionamos la columna edad.
=ORDENARPOR(EJEMPLO2!$A$6:$C$13;EJEMPLO2!$A$6:$A$13;1;EJEMPLO2!$C$6:$C$13;
Como argumento orden2, ponemos -1, es decir, orden descendente.
Cerramos paréntesis, y, aceptamos.
=ORDENARPOR(EJEMPLO2!$A$6:$C$13;EJEMPLO2!$A$6:$A$13;1;EJEMPLO2!$C$6:$C$13;-1)
El resultado es:
Vemos como la región esta ordenada de forma ascendente, y, como la edad va desde el valor mayor al valor menor.
Cuando ordenamos dos columnas, no se ordenan de forma independiente, si no las columnas a la vez, siguiendo el orden de ordenación, vemos que aunque las edades están ordenadas de mayor a menor, no sigue el orden, porque depende de la columna región.
Podemos usar la función MATRIZALEAT y CONTARA, para generar números aleatorios, seria de la siguiente manera:
=MATRIZALEAT(CONTARA(EJEMPLO3!$A$5:$A$13))
Nos va a devolver valores entre 0 y 1.
Si queremos que nos devuelva números enteros debemos de multiplicar por 100.
=MATRIZALEAT(CONTARA(EJEMPLO3!$A$5:$A$13))*100
Vamos a crear un contador con la función SECUENCIA, de la siguiente manera, genero una matriz en vertical de 10 números, empezando desde el numero 1.
=SECUENCIA (10)
Devuelve:
También podemos crearlo con =FILA (1:10), devolvería:
Pero hacerlo de esta manera, tiene un problema, porque si inserto una fila, el contador ya no va de 1 a 10, sino de 1 a 11, porque incluye la fila añadida, para solventar este problema, podemos modificar la fórmula de la manera siguiente:
=FILA (INDIRECTO ("1:10"))
La función INDIRECTO hace referencia a celdas, y, como solo admite valores de texto, debe de ir entre comillas los valores.
Quedaría de la siguiente manera:
Ahora, aunque introduzcamos filas por encima siempre ira de 1 a 10.
Vamos a usar ORDENARPOR con MATRIZALEAT y CONTARA para ordenar de forma aleatoria una lista de valores.
La siguiente sintaxis me generara nueve números aleatorios.
=MATRIZALEAT(CONTARA(EJEMPLO5!$A$6:$A$13))
Multiplicamos por 100 para que el resultado sean números enteros.
=MATRIZALEAT(CONTARA(EJEMPLO5!$A$6:$A$13))*100
En este caso, A4 # hace referencia al rango de la matriz dinámica que empieza en la celda A4, el signo almohadilla (#), se denomina operador de rango desbordado.
Ahora, en otra celda, voy a ordenar, solo la columna región, y, como argumento por matriz1, uso, también, región.
=ORDENARPOR(A6:A13;A6:A13)
Me va a crear una matriz ordenada por región.
Si sustituyo el argumento por matriz1, por la función MATRIZALEAT, que hemos usado anteriormente, me va a ordenar también por región, pero de forma aleatoria.
=ORDENARPOR(EJEMPLO5!$A$6:$A$13;MATRIZALEAT(CONTARA(EJEMPLO5!$A$6:$A$13))*100)
Comments