Macro para rellenar automáticamente celdas adyacentes al seleccionar valor en lista desplegable

Llevo varios días tratando de modificar una macro para adaptarla a mi hoja de cálculo sin éxito alguno. La macro la tomé de está pregunta: Con un macro.. ¿Cómo rellenar automáticamente una celda según el valor de lo que se escribe en otra?. Mi problema es básicamente el mismo: Tengo una serie de nombres de médicos que son seleccionados en una lista desplegable y quiero que al momento de seleccionar ese valor, excel me arroje automáticamente la cédula profesional y domicilio del mismo, sin embargo, no he logrado extrapolar la macro.
Soy nueva en esto de VBA, lo que hice fue:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("N172:N:2092")) Is Nothing Then

cat = Application.VLookup(Target.Value, Sheets("N11:O170"))

If IsError(cat) = True Then

' No lo encontró

Cells(Target.Row, "M11:M170") = ""

Else

Cells(Target.Row, "M11:M170") = cat

End If

End If

End Sub

2 respuestas

Respuesta
1

La macro debería quedar de esta forma, revisa lo siguiente:

1. El rango de celdas donde vas a capturar datos:

Tenías esto

Columns("N172:N:2092")

Y debe ser así

Range("N172:N209")

2. El rango de búsqueda

Tienes esto

"N11:O170"

Y debes poner 3 columnas, una es donde están los nombres de los médicos (supongo que es la columna "N", la columna "O" es de la cédula y la "P" del domicilio, entonces debes poner esto:

Sheets("Hoja2"). Range("N11:P170")

3. También te falta poner el nombre de la hoja, en mi ejemplo yo puse "Hoja2", cámbialo por el nombre de hoja en donde tengas los datos de nombre, cédula y domicilio.

4. En una sola fórmula no te puede traer la cédula y el domicilio, por lo tanto hay que hacerlo 2 veces.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("N172:N209")) Is Nothing Then
        cat = Application.VLookup(Target.Value, Sheets("Hoja2").Range("N11:P170"), 2)
        If IsError(cat) = True Then
            Cells(Target.Row, "O") = ""
        Else
            Cells(Target.Row, "O") = cat
        End If
        '
        cat = Application.VLookup(Target.Value, Sheets("Hoja2").Range("N11:P170"), 3)
        If IsError(cat) = True Then
            Cells(Target.Row, "O") = ""
        Else
            Cells(Target.Row, "P") = cat
        End If
    End If
End Sub

Si tienes problemas para adaptarlo en tu archivo, envíame tu archivo con las 2 hojas y te apoyo para adaptarla.

Hola de nuevo :D
Ayer intenté hacer lo que me dijiste y al parecer no funciono, te envié a tu correo (yahoo.com) la hoja, no se si hay un error en mis columnas, o en la forma en la que acomodé la hoja. Muchas gracias de nuevo :D

Hola!!!
Tenía un error de sintaxis... todo ha quedado arreglado. Muchas gracias!!!

Ya revisé tus datos, la función buscarv se utiliza para buscar un dato y obtener un dato pero de la derecha, en tu caso quieres buscar la cédula pero el nombre lo tienes a la izquierda.

Para estos casos mejor utilizamos find

'Por. Dante Amor
    If Not Intersect(Target, Range("N172:N2092")) Is Nothing Then
        Set b = Sheets("Hoja2").Range("N11:N170").Find(Target.Value, lookat:=xlWhole)
        If Not b Is Nothing Then
            Cells(Target.Row, "M") = Cells(b.Row, "M")
            Cells(Target.Row, "O") = Cells(b.Row, "O")
        Else
            MsgBox "La cédula no existe", vbExclamation
            Target.Select
        End If
    End If

Con find encontramos el dato y nos traemos el nombre y el domicilio

Saludos. Dante Amor

Respuesta
1

Tenés mal escrito el vlookup, esta función tiene 4 parámetros (3 obligatorios), pero vos solo estás poniendo 2, yo la reemplazaría por:

cat = Application.VLookup(Target.Value, Sheets("NombreHOJA").Range("$N$11:$O$170"),3,0)

Fijate que cambió bastante, te faltaba el nombre de la hoja (poné lo que corresponda), y la palabra rango; además fijate que:

  • Agregué símbolos $ para que considere el rango "absoluto"
  • el valor 3 es el que le indicaría que busque la 3er columna
  • 0 (cero), es para decirle que la coincidencia debe ser exacta (sino la función vlookup te da el valor más cercano, pero esto no es lo que querés)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas