lunes, 4 de octubre de 2010

Ordenar dinámicamente (automáticamente) una lista en excell

Si necesitamos que una lista se ordene en excell con respecto a un campo numérico conforme introducimos los datos (sin necesidad de tener que ordenar la lista), podemos utilizar esta solución. Realmente la lista no se ordena, sino que paralelamente a la lista original se va generando una nueva versión de la lista ordenada por el campo numérico indicado.


Limitaciones



Sólo podrá ordenarse la lista con respecto a un campo numérico, que será además la primera columna de la lista. El orden podrá ser ascendente o ascendente.

Vamos a ver el proceso para crear una lista dinámica ordenada a partir de la original utilizando como ejemplo una lista de 3 columnas.


Ordenación ascendente o descendente



Supongamos una lista de valores colocada en las columnas A B y C de nuestro excell. La primera columna contendrá el número por el que queremos ordenar.


Paso 1


Vamos a colocar la lista ordenada a partir de la columna E en adelante. Nos posicionamos en la Celda E-1 y escribimos:

=K.ESIMO.MENOR(A:A;FILA()) ;Para ordenación Ascendente

=K.ESIMO.MAYOR(A:A;FILA()) ;Para ordenación Descendente

La función K.ESIMO.MENOR obtiene el N menor número de una lista de valores.  La función K.ESIMO.MAYOR obtiene el N mayor número de una lista de valores. El primer parámetro es la lista de valores (en este caso A:A es decir, la columna A) y el segundo parámetro es el orden del valor en la lista (si colocamos 1 sería el menor (o mayor) número de la lista, si colocamos 2 sería el segundo menor número de la lista, si colocamos 3 sería el tercero menor, etc). Lo que hacemos es colocar Fila(), que devuelve el valor de la fila en la que estamos. De esa forma para la fila 1 la función nos devolverá el Menor número de la lista, para la fila 2 el segundo menor...etc.

Si quisiesemos colocar la lista a ordenar en una posición distinta de la fila 1, tendríamos que restar a Fila() el número de filas que nos hemos saltado. Por ejemplo, si queremos colocar nuestra lista ordenada a partir de la fila 5, tendríamos que colocar: =K.ESIMO.MENOR(A:A;FILA()-4). De esa forma para la fila 5, el segundo parámetro de la función K.ESIMO.MENOR seguirá siendo 1 (5-4) y la función seguirá buscando el menor número, a pesar de no estar posicionados en la primera fila.

Una vez colocada la fórmula, copiamos y pegamos hacia abajo 30, 40, 100 o tantas posiciones como creamos que pueda alcanzar nuestra lista. Una vez finalizado este paso, ya tendremos ordenados los números de la lista original en la columna E, como se ve en la imagen



Paso 2


A continuación nos posicionamos en la celda F-1 e introducimos la siguiente fórmula:

=BUSCARV(E1;$A$1:$C$30;2;FALSO)

La función BUSCARV busca el valor especificado en el primer parámetro en el conjunto de celdas especificado en el segundo parámetro. En nuestro caso busca el número ordenado que está en E-1, en la lista que está desde A-1 a C-30. Si utilizasemos una lista con más columnas o con más filas este valor sería de acuerdo a eso. Para una lista con columnas hasta la F y con 100 filas sería $A$1:$F$100. Una vez encontrado, devuelve la columna que se indique, en nuestro caso la 2. El último parámetro indica que la coincidencia tiene que ser exacta cuando está puesto a FALSO.

Copiamos el contenido de la celda E-1 a las celdas E-2 hasta E-100 o según el número de filas que creamos que puede abarcar nuestra lista.Con esto obtenemos el primer apellido de las personas en nuestra lista.



Paso 3


Nos colocamos en la celda G-1 e introducimos la siguiente fórmula:

=BUSCARV(E1;$A$1:$C$30;3;FALSO)

La única variante en este paso es el tercer parámetro de la función BUSCARV ya que ahora rescatamos el valor en la columna 3 que son los nombres de nuestra lista. De igual forma, si la lista tuviese más columnas, tendríamos que hacer un BUSCARV para cada una de ellas aumentando el tercer parámetro.

Copiamos el contenido de la celda F-1 a las celdas F-2 hasta F-100 o según el número de filas que creamos que puede abarcar nuestra lista.Con esto obtenemos el nombre de las personas en nuestra lista.



Ya tenemos preparada nuestra lista de ordenación automática. Cada vez que escribamos unos datos nuevos de número, apellido y nombre en las columnas A, B y C, automáticamente la lista en las columnas E, F, G se actualizará con los nuevos datos y ordenados por número:

1 comentario:

  1. Quizás llego un poco tarde para comentar esta entrada, pero bueno, lo suelto por si acaso. Cuando tienes números repetidos, la función buscarv da un fallo, ya que te muestra varias veces el mismo nombre omitiendo otro de una manera un poco aleatoria.

    Es decir, según tu ejemplo, si perez, sanchez y rodriguez tuvieran todos un 3, a la hora de ordenar los números muy bien, pero al usar buscarv te pone perez 2 veces, y luego rodriguez, omitiendo sanchez y así. ¿Tiene esto alguna solución?

    Gracias

    ResponderEliminar

Entradas populares