En relación a este tema recibo a menudo consultas sobre cómo ir eliminando de la lista los valores que ya han sido seleccionados.
Supongamos que estamos organizando en que mesa se sentarán los invitados a una cena o recepción. Para el caso supongamos una lista de 16 invitados que habrá que sentar en cuatro mesas, cuatro en cada una.
Empezamos por poner la lista de invitados en una hoja y una tabla que representa las mesas y sillas en otra


El objetivo es crear una lista desplegable que pondremos en cada celda del rango C3:F6 (rango que hemos puesto en el nombre “mesas”) de manera que cada vez que ubiquemos un comensal en la tabla éste desaparezca de la lista.
Mostraremos dos posibilidades: con columnas auxiliares y con fórmulas matriciales.
Con columnas auxiliares.
En la hoja que contiene la lista de invitados creamos una columna auxiliar con el rótulo “Por ubicar”

El objetivo de esta columna es controlar que invitado ya ha sido ubicado en alguna mesa. Para eso usamos la fórmula
=SI(CONTAR.SI(mesas,C2)=1,"",C2)
Por ejemplo, si ubicamos a Carla y a Federico en la matriz de las mesas, obtenemos


Ahora agregamos una nueva columna auxiliar (Aux1)

La fórmula
=CONTAR.SI($D$2:$D$17,"<="&D2)
da un número de orden a los valores del rango C2:C17 (como la función JERARQUIA a una serie de números).
En caso que el valor de celda sea vacío (la celda no está vacía ya que contiene una fórmula) el resultado es 0 (cero).
Nuestro próximo paso es crear una celda para controlar cuantas invitados nos quedan por ubicar, es decir, cuantos valores distintos de cero hay en el rango Aux1. Con este objetivo ponemos esta fórmula en la celda J1
=CONTAR.SI(E2:E17,">0")

Ahora creamos la columna auxiliar Aux2 en el rango F2:F17 con esta fórmula
=K.ESIMO.MAYOR($E$2:$E$17,$J$1-FILA()+2)

Esta columna nos sirve como argumento para la columna final, en el rango G2:G17, donde obtenemos los valores de la lista desplegable

Para evitar que en la lista desplegable aparezcan los valores #NUM de las últimas dos celda, usamos el valor de la celda “control” para crear un rango dinámico que las excluya con la fórmula
=DESREF(invitados!$G$2,0,0,invitados!$J$1,1)

Aplicamos esta validación de datos al rango “mesas”.

A medida que vamos ubicando a los invitados, la lista se va ajustando y mostrando sólo aquellos que quedan por ubicar

Con fórmulas matriciales.
Al igual que en el modelo anterior creamos la lista de los invitados a ubicar en el rango D2:D17.
La lista de invitados a ubicar la creamos en el rango E2:E17 con esta fórmula matricial
={INDICE($D$2:$D$17,COINCIDIR(K.ESIMO.MAYOR(CONTAR.SI($D$2:$D$17,"<="&D2:D17),FILA()-1),CONTAR.SI($D$2:$D$17,"<="&D2:D17),0))}

Como puede verse, no obtenemos errores #NUM, pero las celdas al final de la lista no están vacías. De manera que necesitamos una celda de control, como en la solución con columnas auxiliares, para que la lista desplegable muestre sólo los nombres disponibles.
En la celda H1 ponemos esta fórmula matricial
={SUMA((CONTAR.SI($D$2:$D$17,"<="&D2:D17)<>0)*1)}

La lista desplegable la creamos con el fórmula
=DESREF('invitados matricial'!$E$2,0,0,'invitados matricial'!$H$1,1)

Todo sobre listas desplegables en Excel, técnicas avanzadas y descarga gratuita de ejemplos en la Caja de Herramientas Excel - Listas Desplegables de JLD. Ver la nota o ir a la página de descarga de la guía.
Technorati Tags: MS Excel