Hace algunos dias elaboré unas macros para un Arquitecto que tenian que ver la mayoría con Listas de validación en cascada, y como el día de hoy cuento con algunas horas libres y hace algunas semanas que no posteo nada en el Blog lo voy a tomar como tema.
Como habiamos visto anteriormente la herramienta de validación de datos de Excel es muy interesante y funcional porque sirve para delimitar los datos de captura a los usuarios en determinadas celdas.
Ahora le toca el turno a las listas de validación en cascada, una técnica común para llevar acabo esto es asignarle un nombre a los rangos y utilizar la función Indirecto.
El mantenimiento de los nombres de los rangos en caso de que se agregen o eliminen datos puede ser tedioso cuando el número de campos llega a ser considerable. En esta ocasión veremos un ejemplo con pocos datos, si usted necesita una lista con un volumen de datos considerable le aconsejo que use la función DESREF para crear los nombres porque facilita el mantenimiento de estos y así evitará estar renombrandolos cuando se agreguen o eliminen datos, en un siguiente post explicare en que consiste esta función.
Descarga el libro de ejemplo
DV_CascadaIndirecto.xls
Para agregar los nombres selecciona el rango E2:E4 y en el cuadro de nombres escribe Marca.
Haz el mismo procedimiento para los rangos:
G2:G5 con el nombre Renault
G8:G10 con el nombre BMW
G13:G15 con el nombre Peugeot
Ahora posicionate en la celda A2, en la barra de menú ve a Datos > Validación de Datos, elige la opción Lista y en el campo origen ingresa =Marca
El siguiente paso es posicionarte en la celda B2, en la barra de menú ve a Datos > Validación de Datos, elige la opción
Lista y en el campo origen ingresa la fórmula
=INDIRECTO(A2)
Ahora para darle un toque de elegancia vamos a agregarle una macro de evento para que cuando el rango A2 cambie de valor el rango B2 cambie los valores dependientes.
Para agregar la macro presiona Alt-F11 y en la ventana de código de la Hoja1 pega el siguiente código:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range(«A2:A2»), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
temp = Range(Target)(1)
Target.Offset(0, 1) = temp
Application.EnableEvents = True
End If