Macro para hacer vlookup entre diferentes libros y con rango variable

Tengo esta Macro, que abre dos archivos (libro datosdestino) y el libro del cual queremos traernos información mediante un buscarv (libroDatos_01).

Dim libroDatosDestino As Workbook
Set libroDatosDestino = Workbooks.Open(ThisWorkbook.Path & "\Informe Talento_Plantilla_.xlsm")

Dim libroDatos_01 As Workbook
Set libroDatos_01 = Workbooks.Open(ThisWorkbook.Path & "\01.xls")
Application.DisplayAlerts = False

Estoy luchando por primera vez para conseguir hacer un buscarv mediante VBA.

Los IDs que tiene que buscar ya están contenidos en el libroDatosDestino (columna A), y el rango es variable (porque cada vez que ejecuten la macro va a tener una cantidad distinta de filas).

La cuestión es que quiero que en librosDatosDestino haga un buscarV en la columna J, busque el valor contenido en la celda A, y devuelva el valor que hay en la columna K del libroDatos_01 y complete la columna J (como cuando tiramos "para abajo" de la fórmula -> por eso lo del rango variable).

Todas las pruebas que he hecho lo único que he conseguido es que haga el buscarV pero en el archivo libroDatos_01, en vez de hacerlo en libroDatosDestino! No sé por qué no me selecciona la celda J2 del libroDatosDestino.

Tengo este trozo de código pero tras unas cuantas pruebas ya no sé hasta qué punto es válido (creo que no tiene nada de sentido):

'Application.Goto Workbooks("Informe Talento_Plantilla_.xlsm").Sheets(1).Range("J2")
'libroDatosDestino.Sheets(1).Range("J2").Select
'Dim lastrow As Long
'lastrow = libroDatosDestino.Sheets(1).Range("A2").End(xlDown).Row
'ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],[libroDatos_01]Report!C1:C11,11,FALSE)"
'Columns("J").EntireColumn.AutoFit

A ver si alguien pudiera ayudarme con esta cuestión...

Respuesta
2

Estoy un poco enredado.

Para entender qué vas a buscar, en dónde lo vas a buscar, qué quieres de resultado y en dónde quieres poner el resultado, vamos a desglosar la fórmula BuscarV, te parece bien:

- Nombre libro, Nombre Hoja y la columna donde quieres poner el resultado.

- Libro, hoja y columna donde está el valor buscado

=Buscarv(valor_buscado

- Libro, hoja, columna inicial y final de la matriz_buscar_en

=Buscarv(valor_buscado, matriz_buscar_en

- El número del Indicador_columnas 

=Buscarv(valor_buscado, matriz_buscar_en, indicador_columnas)


La macro la voy a preparar para que funcione con todas las filas que tienen dato en la columna A, con eso no tengo problema.

Hola, 

creo que la he conseguido hacer (de una manera que quizás consume muchos datos):

'BuscarV columna J. Traer de la 1-K.
Application.Goto Workbooks("Informe Talento_Plantilla_.xlsm").Sheets(1).Range("J2")
ActiveCell.FormulaR1C1 = "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],[01.xls]Report!C1:C11,11,FALSE))"
ActiveCell.Copy
Application.Goto Workbooks("Informe Talento_Plantilla_.xlsm").Sheets(1).Range("J2:J10000")
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

La fórmula, en Excel, quedaría de esta manera (escrita en la celda J2 que luego necesitaremos replicar en las celdas posteriores).

=Buscarv(A2;[01.xls]Report!$A:$K;11;FALSO)

No sé si la manera que la he escrito en el código es la más eficiente (tengo que hacer unos 35 buscarvs en el programa, con referencia a libros distintos). 

¿Qué opinas?

Muchas gracias por tu ayuda. 

No me respondiste mis dudas, así que viendo tu fórmula puedo deducir los datos.

Ejecuta la siguiente macro en tu archivo "Informe Talento_Plantilla", en la hoja (1)

Sub Poner_BuscarV()
    With Range("J2:J" & Range("A" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=VLOOKUP(RC[-9],[01.xls]Report!C1:C11,11,0)"
    End With
End Sub

Con esa instrucción se pone la fórmula en la columna J, desde la fila 2 y hasta la última fila con datos de la columna A.

Si vas a poner otra fórmula, por ejemplo, en la columna K y vas a buscar en el libro 02, la macro quedaría así:

Sub Poner_BuscarV()
    With Range("J2:J" & Range("A" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=VLOOKUP(RC[-9],[01.xls]Report!C1:C11,11,0)"
    End With
    With Range("K2:K" & Range("A" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=VLOOKUP(RC[-10],[02.xls]Report!C1:C11,11,0)"
    End With
End Sub

Observa los cambios que realicé para que puedas aplicarlo en lo que tú necesitas.


Es importante que la macro la ejecutes en el libro donde vas a poner las fórmulas.


[Si te ayudó la información, no olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas