lunes, 2 de enero de 2012

Ordenación alfabética de una lista de nombres

Excel permite ordenar con facilidad textos o números usando Datos + Ordenar. Pero, en ocasiones, necesitamos que la ordenación se realice automáticamente. La solución consiste en usar, con algo de ingenio, la función CONTAR.SI.

La columna B contiene una lista desordenada de nombres no repetidos que debemos ordenar en la columna E. Usaremos una columna auxiliar (columna G) para almacenar datos intermedios.


En G3:
=CONTAR.SI($B$3:$B$17;"<="&B3)    [Resultado: 12]

La fórmula cuenta los elementos del rango B3:B17 que son menores o iguales que el valor de B3 (Raquel). Al tratarse de textos, "menor que" significa "colocado antes de" en una ordenación alfabética. De ese modo, Raquel tiene 11 nombres delante y ocupa el puesto 12.

Extendemos la fórmula hasta la fila 17. Ya tenemos la posición, en la ordenación alfabética, de todos los nombres de la lista.

Ahora, con INDICE y COINCIDIR extraemos cada elemento y lo ponemos en la columna E.

En E3:
=INDICE($B$3:$B$17;COINCIDIR(D3;$G$3:$G$17;0);1)    [Resultado: Alberto]

Extendemos la fórmula hasta la fila 17. La ordenación se ha realizado correctamente.

Este método de ordenación no sirve si la lista contiene nombres repetidos. Por ejemplo, si Oscar está repetido en las celdas B6 y B14, se produce la siguiente situación:

En la columna auxiliar, G6 y G14 tienen el mismo número de orden (9). No existe un nombre que tenga asignado el número 8. Por ese motivo, la función COINCIDIR no encuentra el 8 en G3:G17 y, en consecuencia, genera el error #N/A.

La solución a este nuevo problema implica la utilización de una segunda columna auxiliar. Consideremos una lista de nombres donde Gregorio, Miren y Oscar están repetidos dos o más veces:

En G3:
=CONTAR.SI($B$3:$B$17;"<="&B3)     [Esta fórmula es la misma que en el caso anterior]

Extendemos la fórmula hasta la fila 17.

Las posiciones de Gregorio, Miren y Oscar son, respectivamente, cuarta, novena y decimotercera. En la columna G no aparecen los números 3, 8, 10, 11 y 12. En la columna H vamos a tratar de conseguir que todos los números sean correlativos y no falte ninguno.

En H3:
=$G3-CONTAR.SI($G$3:$G3;$G3)+1

Extendemos la fórmula hasta la fila 17.

Ahora, con INDICE y COINCIDIR, y empleando los números de la columna H, extraeremos los nombres de la columna B perfectamente ordenados y los pondremos en la columna E.

En E3:
=INDICE($B$3:$B$17;COINCIDIR(D3;$H$3:$H$17;0);1)

Extendemos la fórmula hasta la fila 17. El resultado es una lista totalmente ordenada.



1 comentario:

  1. Hace tiempo encontré una solución similar a la que se expone...
    Me gustaría saber cómo ordenar datos alfanuméricos con fórmulas, de manera similar a la función JERARQUIA() en datos numéricos.
    El problema: uso de ventanas desplegables valores 'alfa' previamente entrados de forma aleatoria, de manera que en esas desplegables aparezcan los datos ya ordenados.
    Si al rango alfanumérico A1:A20 lo llamo 'Rango_a_ordenar'
    y uso =CONTAR.SI('Rango_a_ordenar';"<="&A4)
    al estar A4 dentro del rango ordenado, siempre me devuelve un número de orden correccto, pero con el error de referencia circular.
    ¿Cómo lo evito?

    ResponderEliminar