El objetivo de este artículo es ver como una lista desplegable cambia sus valores en función de una selección previa. Imaginemos estos datos:

La idea es que en la celda C17 se seleccione una de las ligas posibles y que en la celda C18 aparezca la lista de jugadores de esa liga.
Una premisa importante es que los datos están en un formato de tabla.
Empezamos obteniendo la lista de ligas.
Una vez seleccionados todos los datos incluida la fila de títulos, utilizamos la opción Fórmulas / Nombres definidos / Crear desde la selección. Atajo de teclado: Ctrl+Shift+F3.

Dejamos marcado únicamente Fila superior. Al aceptar se acaban de crear tantos nombres como los títulos de las columnas y cada uno de ellos incluye todos los valores de las columnas.
Lo vemos al acceder a Fórmulas / Nombres definidos / Administrador de nombres. Atajo de teclado: Ctrl+F3

A continuación seleccionamos únicamente la fila de los títulos y les asignamos un nombre: Ligas. Fórmulas / Nombres definidos / Asignar nombre

El siguiente paso es crear las listas desplegables en C17 y C18.
La C17 es una Validación de datos basada en el nombre Ligas:

Cuando se despliega la lista aparecen los nombres de las distintas ligas.

Ahora se trata de crear el desplegable en la celda C18 que responda a la selección realizada en C17. Para ello estableceremos una validación de datos basada en una lista pero utilizando la función INDIRECTO.

En cada cambio de valor en el desplegable de Liga, el desplegable de los jugadores se modifica para mostrar los registros adecuados.



Hay un escenario dónde esta técnica se complica: cuando los nombres de las columnas tienen espacios. Como sabemos, los nombres no pueden contener espacios por lo que, aunque veamos los nombres correctamente en el desplegable:

En realidad, los nombres de las columnas sustituyen los espacios por _ de manera que la función INDIRECTO no es capaz de reconocer correctamente los nombres y, por lo tanto, devuelve un error:

El truco en este caso es hacer una sustitución en la referencia a la celda C17.
=INDIRECTO(SUSTITUIR($C$17;» «;»_»))

0 comentarios