Lista desplegables con Código y descripción

Me gustaría saber si hay forma de hacer una lista desplegable que al selección la descripción, me traiga el código asignado a ella, es decir tengo una hoja de excel con varias lista desplegables ejemplo:

A1        A2

Cód BANCO

00 BANCO DE LA REPÚBLICA

01 BANCO BOGOTÁ

02 BANCO POPULAR

Cod departamento

01         SIN IDENTIFICAR

05         ANTIOQUIA

08         ATLÁNTICO

Lo que quiero es que cuando seleccione la descripción me ponga el código, ¿es posible hacerlo?

1 Respuesta

Respuesta
1

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

':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas