H o l a:
Suponiendo que tienes tus listas de validación como se muestra en la imagen:
En la columna B tienes la descripción y en la columna A tienes los códigos.
Lo primero que tienes que hacer es crear tus listas de validación:
Por ejemplo, yo escogí las celdas D2 y D11 para poner las listas de validación de Bancos y de departamentos, respectivamente.
Ya que tienes creadas las listas de validación, pones la siguiente macro en los eventos de tu hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
'
'Bancos
If Target.Address(False, False) = "D2" Then
rango = "B2:B4"
Call PonerCodigo(Target, rango)
End If
'Departamentos
If Target.Address(False, False) = "D11" Then
rango = "B12:B14"
Call PonerCodigo(Target, rango)
End If
End Sub
'
Sub PonerCodigo(Target, rango)
'Por.Dante Amor
Set b = Range(rango).Find(Target, lookat:=xlWhole)
If Not b Is Nothing Then
cod = b.Offset(0, -1)
Application.EnableEvents = False
With Target.Validation
.Delete
Target.Value = cod
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & rango
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Application.EnableEvents = True
End If
End Sub
Ahora, tienes que adaptar la macro a como tienes tus datos.
En las siguientes líneas de la macro:
If Target.Address(False, False) = "D2" Then
If Target.Address(False, False) = "D11" Then
Tienes que cambiar el D2 y el D11 por las celdas que tienen la lista de validación de Bancos y de departamentos.
El siguiente cambio en la macro es, tienes que poner en la macro los rangos de la lista de validación de cada celda:
rango = "B2:B4"
Rango = "B12:B14"
Cambia B2:B4 por el rango que corresponda a Bancos, así mismo, cambia B12:B14 por el rango que corresponda a Departamentos.
Listo, ahora cuando selecciones la descripción, en automático te pondrá el código en la misma celda.
Por ejemplo, si selecciono la descripción Atlántico, en la celda aparecerá el código 08:
Si quieres agregar otra celda con lista de validación, solamente agrega estas líneas en la macro con la celda que contiene la lista y el rango de la lista, ejemplo:
'otra lista
If Target.Address(False, False) = "D20" Then
rango = "B50:B60"
Call PonerCodigo(Target, rango)
End If
Quedaría así:
Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
'
'Bancos
If Target.Address(False, False) = "D2" Then
rango = "B2:B4"
Call PonerCodigo(Target, rango)
End If
'Departamentos
If Target.Address(False, False) = "D11" Then
rango = "B12:B14"
Call PonerCodigo(Target, rango)
End If
'otra lista
If Target.Address(False, False) = "D20" Then
rango = "B50:B60"
Call PonerCodigo(Target, rango)
End If
End Sub
':)
':)