H o l a:
No entendí muy bien lo que tienes en la macro.
Mejor explícame qué necesitas.
Entiendo que quieres buscar un dato en una base datos.
Podrías poner una imagen de tu hoja del libro1
Y otra imagen de tu hoja donde tienes tu base de datos.
¿Tampoco está claro qué se debe hacer si se encuentra el dato en la base de datos y qué se debe hacer si no se encuentra?
Veamos:
Tienes datos en el libro1, en la hoja1 desde la celda D2 hacia abajo.
Hay que buscar cada dato en el libro2 "contrapastes.xlsb", en la hoja1, en la columna A y traer como resultado el dato de la columna B.
Si lo encuentra poner el resultado en el libro1, hoja1, columna E.
Si no lo encuentra poner "No existe" en el libro1, hoja1, columna E.
Lo anterior es un ejemplo, porque no entiendo muy bien cómo están los datos.
La macro para hacer lo anterior es:
Sub BuscarDatos()
'Por.Dante Amor
Set l1 = ThisWorkbook 'Libro1
Set h1 = l1.Sheets("Hoja1") 'hoja con los datos a buscar
'
Set l2 = Workbooks("Contrapartes.xlsb") 'Libro2 con la base de datos
Set h2 = l2.Sheets("Hoja1") 'hoja con la base de datos
'
For i = 2 To h1.Range("D" & Rows.Count).End(xlUp).Row
'busca el dato en h2
Set b = h2.Columns("A").Find(h1.Cells(i, "D"), lookat:=xlWhole)
If Not b Is Nothing Then
'sí existe
h1.Cells(i, "E") = h2.Cells(b.Row, "B")
Else
h1.Cells(i, "E") = "No existe"
End If
Next
MsgBox "Fin"
End Sub
Personalmente no me gusta utilizar en vba VlookUp, solamente te trae un dato, en cambio, con el método Find, obtienes en el objeto b todo el objeto de la celda encontrada, de ese objeto puedes obtener, el valor de la celda, el color, la fórmula, el tamaño de letra, la dirección, la fila, la columna, la hoja, etc.
Sin embargo te dejo la macro para utilizar vlookup:
Sub BuscarDatosConVlookup()
'Por.Dante Amor
Set l1 = ThisWorkbook 'Libro1
Set h1 = l1.Sheets("Hoja1") 'hoja con los datos a buscar
'
Set l2 = Workbooks("Contrapartes.xlsb") 'Libro2 con la base de datos
Set h2 = l2.Sheets("Hoja1") 'hoja con la base de datos
'
For i = 2 To h1.Range("D" & Rows.Count).End(xlUp).Row
'busca el dato en h2: (dato a buscar , rango basedato,col, coincidencia exacta
res = Application.VLookup(h1.Cells(i, "D"), h2.Range("A:B"), 2, 0)
If Not IsError(res) Then
'sí existe
h1.Cells(i, "E") = res
Else
h1.Cells(i, "E") = "No existe"
End If
Next
MsgBox "Fin"
End Sub
Los argumentos son así:
'busca el dato en h2: (dato a buscar , rango basedato,col, coincidencia exacta
res = Application.VLookup(h1.Cells(i, "D"), h2.Range("A:B"), 2, 0)
Utiliza
Application. VLookup
En lugar de
WorksheetFunction. VLookup
Si utilizas WorksheetFunction. VLookup y no existe, te va a enviar error.
':)
':)