Este tema es muy ben tratado en internet. En primer lugar
cuando hablamos de lista de validación de datos, nos referimos a las listas
tipo Combobox que se pueden crear en una celda con validación de datos. Y
cuando hablamos de dependiente nos referimos que de acuerdo al valor que toma
una celda, podemos obtener diferentes valores en la lista.
En este artículo vamos a ver un método distinto al
tradicional que podemos encontrar en internet. Este método prevé obtener las
listas directamente desde la base de datos ordenada, no es necesario como en la
forma tradicional de hacer un arreglo con las diferentes listas.
Click en la imagen para ver el video o en este link.
Antes de entrar con el método más avanzado que queremos
mostrar, vamos a ver el método clásico que van a ver en internet. Este método
tiene ciertas desventajas que veremos.
La ventaja de este
método es que es fácil de entender, la desventaja es que si tenemos muchas
listas es incomodo y arduo porque debemos construir todas las listas. Y para
eso necesitamos una hoja auxiliar. Por cada variable nueva, necesitamos crear
una lista nueva. Además podemos cometer errores, olvidar datos, etc. Otra
desventaja podría ser que los datos no se agregan automáticamente a las lista,
es decir que cuando introducimos un nuevo dato sino esta prevista en las
listas, este no se ve en la lista de validación.
Listas dependientes
– Método Tradicional:
Partimos que tenemos una concesionaria de autos por
ejemplo. Tenemos tres marcas y varios modelos por marca. En este caso 3 marcas
(BMW, AUDI, ALFA ROMEO).
En el método tradicional tenemos los datos ordenados de
esta manera.
Como ven hay varias columnas, una de marcas y por cada
marca tenemos una lista de los modelos. En este caso tenemos solo 3
modelos que serían nuestras variables,
entonces es bien simple.
Como ven tenemos las listas de validación ya creadas, a la
derecha. En la primera tenemos la opción de elegir entre las tres marcas y en
la segunda, de acuerdo a la marca nos muestra el modelo. Ahora vamos a ver cómo
construirla.
El paso 1 sería
crear nombres para cada lista, el de las marcas le podemos llamar “Marcas” como
se ve en la imagen.
Paso 2, A las
listas de modelos las podemos llamar, tal cual se ve en la imagen, “Audi”,
“BMW”, y “Alfa_Romeo”. Este último con el guión ya que los nombres no aceptan
espacios. Recuerden que para crearlo deben seleccionar el rango y a la
izquierda de la barra de formulas escribir el nombre que quieran. La otra forma
sería con el administrador de nombres pero la primer es más simple.
Paso 3, para
crear la primera lista de “Marcas” vamos a la celda de marcas luego a la solapa
de “Datos” luego seleccionamos “Validación de datos”, se abre un formulario,
elegimos “Lista” y en la formula escribimos el nombre dado a la lista de
“Marcas” con lo que nos queda la lista de Marcas , tal muestra la figura.
Paso 4, ahora
vamos a crear la lista para el modelo correspondiente a la marca seleccionada
en la primer lista.
Usamos la función “Indirecto(“$H$5”)”. Es decir que nos
trae la lista que esta en esa celda. Es decir si esta BMW por ejemplo, nos
mostrara el rango nombra con ese nombre que se corresponde a los modelos de la
marca BMW.
Así termina el método clásico para hacer listas
desplegables dependientes. El método más avanzado no varía mucho en cuánto al
procedimiento pero tenemos una formular más extensa en la validación.
Listas dependientes
– Método avanzado:
Partimos del ejemplo de base de datos que teníamos del Mini
Motor de Búsqueda en Excel sin macros. Es decir que tenemos una lista de
elementos, productos, en este caso autos. Siempre en toda base de datos tenemos
una lista ordenada en filas y columnas con valores, con un título para cada
columna. Algunas veces elegimos mostrar los datos de una manera determinada
pero siempre hay una base de datos. Las columnas que tenemos son ID, Marca,
Modelo, Cantidad y precio.
Para nuestro ejemplo tenemos pocos elementos pero podemos
tener miles, y además estos elementos se pueden ir incrementando, suponiendo
que se ingresa un producto nuevo no listado.
Paso 1, tenemos nuestra base de datos en forma de lista. Esta base de datos esta ordenada, como se ve en la figura. Si no es así este método no funciona por lo que deberán ordenarla. Así quedan agrupadas las mismas marcas como se ve. Si son elementos estáticos lo hacen una sola vez y queda listo sino pueden utilizar una macro para hacerlo cada vez que ingresan un dato nuevo, por ejemplo.
Paso 1, tenemos nuestra base de datos en forma de lista. Esta base de datos esta ordenada, como se ve en la figura. Si no es así este método no funciona por lo que deberán ordenarla. Así quedan agrupadas las mismas marcas como se ve. Si son elementos estáticos lo hacen una sola vez y queda listo sino pueden utilizar una macro para hacerlo cada vez que ingresan un dato nuevo, por ejemplo.
Paso 2, tenemos
dos celdas en donde se encuentran nuestras litas. En la primera listamos las
marcas, en este caso como son 3, podemos escribirlas directamente, como muestra
la figura.
La forma de introducir una lista es, en la barra de
formulas de la validación de datos introducir los elementos separados por una
coma “,”. Para nuestro ejemplo “Audi, BMW, Alfa Romeo”. Por supuesto si son
muchos elementos deben buscar otra forma más elegante pero para nuestro ejemplo
sirve.
También como ven en la figura, en la configuración de la
validación de datos configuramos un
mensaje de entrada para evitar errores. Ya que si cambia la información de la
marca siempre debemos verificar la lista de modelos y elegir uno, de otra
manera mostraría datos erróneos en la celda de la derecha.
Paso 3, para
esta parte vamos a utilizar varias formulas. Para evitarnos los arreglos que
vimos con el método clásico.
En la figura se ve una formula, ahora vamos a tratar de
explicar los elementos.
Lo que vamos a hacer es usar una formula muy útil de Excel
por la cual podemos hacer referencia a un rango de celdas teniendo en cuenta
una celda o un rango. Es como tomar como referencia una celda para poder
encontrar otras.
La función más importante que vamos a usar “DESREF” o
referencias relativas. La función Desref sirve para referenciar un rango de
celdas, de acuerdo a otro rango u otra celda.
Si no entienden esta fórmula no se preocupen, hay muchos
sitios en internet donde pueden encontrar mas info.
Los datos que necesitamos saber son los siguientes:
·
Coincidir: cuando elegimos un modelo, cómo
tenemos en la base de datos ordenada todos los autos de la misma marca
agrupados, podemos encontrar la posición relativa del primer elemento que
coincide con el modelo que elegimos. Tener en cuenta el rango completo de datos
de la base de datos. El dato encontrado sería el que se ve con bordes
rojos y punteados.
·
Contar si: nuevamente al tener agrupados los
elementos de la misma marca, podemos saber cuanto son con la formula contar.si.
Tener en cuenta el rango completo de datos de la base de datos.
·
Dirección: lo que hacemos con esta formula es construir
la dirección de donde se encuentra el primer dato que nos interesa. El dato que
esta a la derecha del dato encontrado con coincidir, el primer dato de la lista,
que sería nuestra variable. El resto de los datos de la función DIRECCIÓN se
mantendría constante para la misma base de datos.
·
Indirecto: esta función la vamos a utilizar
dentro de la validación pero la mostramos igual para que vean como funciona.
Una vez construida la dirección con INDIRECTO vemos el dato que tiene esa
dirección, indirectamente. Como
habíamos dicho, es el primer dato de la lista de modelos que nos interesa.
·
Desref: por ultimo vamos a utilizar nuestra
función principal. La formula tiene como primer parámetro una REF, la
referencia que vamos a utilizar es el indirecto que ya habíamos hablado, que
tiene en cuenta la dirección del primer dato de la lista de modelos. Como ese
mismo dato es tomado como referencia, la fila y la columna son “0”. Luego especifico
el alto que es lo que obtuvimos con el Contar.Si y el ancho es de una columna.
De esta manera el resultado de esta formula, si se pudiera mostrar, sería lo
que esta sombreado en naranja. En una celda no lo puede mostrar, a menos que
sea como dato de otra formula, pero lo vemos como una lista en la validación.
Con todos los elementos vistos podemos construir una aplicación
interesante. Esperamos que les sirvan y le gusten las ideas.
Pueden descargar algunos ejemplos
(plantillas/templates) de la zona de Descargas. Si
tienen alguna duda o consulta pueden hacerlo a través del formulario de contacto.
Les recomendamos que sigan el
blog por alguno de los medios, mail o por redes sociales, para recibir las
actualizaciones y novedades.
¡Éxitos!
Keys:
·
Lista dependiente de Validación de datos.
·
Listas dependientes con Desref.
·
Listas de Validación Dinámicas Dependientes con
Excel
·
Excel
Dependent Data Validation lists
·
Excel
Dependent Dropdowns from a Sorted List
·
Use
validation to create dependent lists – Excel
·
Dynamic
Dependent Drop Down List in Excel
7 comentarios:
Me podrias enviar el xls a mi email para poder entenderlo mejor porfavor?
enio.deleon87@gmail.com
Hola amigo, cómo estas! Gracias por escribirnos!
Con el video y el artículo del blog no tendrías problemas para poder probarlo. El archivo no esta disponible para descarga aún.
Saludos
Una consulta, como se podría hacer esto mismo pero que las listas se agreguen en ComboBox del Userform ?
Hola amigo, cómo estas!
En cuanto a tu consulta, claro que se puede. Revisa los demás artículos, hay uno que utilizamos un userform. El tema es que tienes que levantar los ítems en el combo y generar la rutina. No esta faltando publicar un artículo. Básicamente generas el filtro de búsqueda en una hoja y luego vas actualizando los ítem del combobox. Es super fácil y tienes todo en el blog para poder hacerlo.
Esperamos tus comentarios.
Saludos
Saludos!!!
Tengo un libro; con dos hojas, en la hoja Plantilla hay tres listas desplegables dependientes en 3 columnas en las que puedo elegir un PAÍS (Z) en concreto; DEPARTAMENTO (AA) y un MUNICIPIO (AB), en la segunda hoja esta todo lo referente a las listas desplegables.
La hoja Plantilla tiene código VBA; que valida que el MUNICIPIO (AB) pertenezca al DEPARTAMENTO (AA) y este al PAÍS (Z) es decir si tengo una elección echa en las 3 celdas y vuelvo hacer una nueva selección de PAÍS (Z4) el código me “limpia”las celdas DEPARTAMENTO (AA4) /MUNICIPIO (AB4), hasta ahí funciona perfecto pero si solo necesito cambiar la selección del DEPARTAMENTO (AA4), no me limpia la celda MUNICIPIO (AB4), no logro identificar que hace falta.
Private Sub Worksheet_Change(ByVal Rango As Range)
If Rango.Rows.Count = Rows.Count Or _
Rango.Columns.Count = Columns.Count Then
Exit Sub
End If
Application.EnableEvents = False
For Each Target In Rango
If Left(Target.Address, 3) = "$Z$" Then
Range("AA" & Target.Row) = ""
Range("AB" & Target.Row) = ""
ElseIf _
Left(Target.Address, 3) = "$AA$" Then
Range("AB" & Target.Row) = ""
End If
Next
Application.EnableEvents = True
End Sub
adjunto link del archivo: https://drive.google.com/file/d/0B8OyJ_ ... sp=sharing
Muchas gracias
Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, no entendemos bien lo que estas necesitando. En este artículo tratamos de no usar macros para el fin, vemos que tu lo utilizas. Es lo mejor en casos complicados, utilizar una mezcla entre formulas y código para simplificar. Estamos seguros que vas por buen camino.
Esperamos tus comentarios.
Saludos
Publicar un comentario