¿Cómo programar vlookup en una macro?

Hola!
Necesito pls que me ayuden a programar una macro para que en una columna de la hoja1 ponga el resultado de un vlookup, la lista llega a las cinco mil filas.
Entonces la base de datos donde necesito que el buscarv haga la búsqueda esta en la hoja2, obviamente la fórmula normal de buscarv me da error.. me ayudan pls a entender como se construye.
Gracias

1 respuesta

1
Respuesta de
Hola:
¿Por qué 'obviamente' la fórmula normal de BUSCARV te da error? No tiene porqué, seguramente la estás escribiendo mal.
Te dejo 1 ejemplo:
Dato en A2 de la Hoja1
Rango en A2:H100 de la Hoja2
Col a devolver: col C (es decir, col 3 del rango)
Falso: para que te devuelva la coincidencia exacta:
=BUSCARV(A2;Hoja2!A2:H100;3;falso)
Estoy utilizando pto y coma como separador, quizás tu libro utilice solo coma... verifícalo y ajústalo
Sdos. No dejes de comentarme si ahora sí la función resuelve tu consulta.
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Es que he tratado de asignarle este proceso a un botón para que se corra una macro con el resultado a lo largo de las 5mil lineas.. pero no me funciona.
Aquí te dejo una rutina de ejemplo. La fórmula que se coloca es la que te dejé en respuesta anterior, comenzando por la fila 2
Sub MacroBuscarV()
'x Elsamatilde
' Macro para rellenar un rango con función BuscarV
'
' la fórmula que se colocó es:  BUSCARV(A2;Hoja2!$A$2:$B$5000;2;falso)
'se rellena desde fila 2
Range("B2").Select
    ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],Hoja2!R2C1:R5000C2,2,FALSE)"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B5000"), Type:=xlFillDefault
    Range("B2").Select
End Sub
Sdos. No dejes de comentarme si la pudiste adaptar a tu libro
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Esta perfecta!
Como hago para que arrastre la fórmula hasta la ultima linea que en columna A .. hayan datos.. veo que este es el script; como podría modificarlo
Selection.AutoFill Destination:=Range("B2:B5000"), Type:=xlFillDefault
Elsa muchas gracias por compartirnos!
'Agregá esta línea:
ultima=Range("A65536").Row


'Ahora modificá esta con la fórmula:
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],Hoja2!R2C1:R" & ultima & "C2,2,FALSE)"
Sdos
Elsa
http://aplicaexcel.galeon.com/macros.htm
Elsa, estoy muy cerca.. el problema que tengo es que necesito traer en la fórmula VLOOKUP el valor de la columna #9 y no el de la 2
Intente arreglarlo así: pero no funciono
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],YESTERDAY_REPORT!R2C1:R" & ULTIMA & "C2,9,FALSE)"
El otro problema que tengo es que la fórmula no esta corriendo a lo largo de las filas con datos.
Gracias de nuevo.
Te dejo el script completo
Sub BuscarValoresayer()
Sheets("REPORT").Select
Range("b:b").Select
Selection.EntireColumn.Insert
 'Macro para rellenar un rango con función BuscarV
Range("b2").Select
ULTIMA = Range("A65536").Row
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],YESTERDAY_REPORT!R2C1:R" & ULTIMA & "C2,9,FALSE)"
Veo que me faltó algo en la instrucción enviada con anterioridad:
ultima=Range("A65536").End(xlup).Row
Y la de la fórmula queda así para 9 col:
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],YESTERDAY_REPORT!R2C1:R" & ULTIMA & "C9,9,FALSE)"
Te explico:
R = Row = fila
C= Column = columna
Entonces:
RC[-1] significa la misma fila que la celda activa y 1 col a izquierda. Si estás en B2, será que busca el valor que aparece en A2, lo busca en el rango: A2:I hasta la fila 'ultima' (R2C1:R... C9) y debe devolver lo de la col 9 (aquí el argumento 9 está bien colocado)
Espero que ahora esté claro y solucionado.
Sdos
Elsa

Elsa muchísimas gracias! esta funcionando perfecto.. ¿ahora por qué la fórmula no continua a lo largo de la columna? Intente hacerlo con el bucle do while.. Pero me dio un error al finalizar el LOOP.
Sub BuscarValoresayer()
Sheets("REPORT").Select
Range("b:b").Select
Selection.EntireColumn.Insert
 'Macro para rellenar un rango con función BuscarV
 Do While Range("a2") <> ""
 Range("b2").Select
 ULTIMA = Range("a65536").End(xlUp).Row
 ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],YESTERDAY_REPORT!R2C1:R" & ULTIMA & "C9,9,FALSE)"
 Loop
 End Sub
Si te fijas un poco + arriba, el día 17 estaba incluida la instrucción de arrastre, no hace falta el bucle:
Selection.AutoFill Destination:=Range("B2:B5000"), Type:=xlFillDefault
Pero aquí hay algo poco claro: una cosa es la última celda con datos en col A de tu hoja REPORT y otra la última celda con datos en la tabla donde debe buscar la coincidencia...
Te la dejo completa para que veas si es correcto:
Sub BuscarValoresayer()
'x Elsamatilde
Sheets("REPORT").Select
Range("b:b").Select
Selection.EntireColumn.Insert
 'Macro para rellenar un rango con función BuscarV
Range("b2").Select
'última celda con datos en col A de hoja REPORT
ULTIMA = ActiveSheet.Range("A65536").End(xlUp).Row
'ultima celda con datos en col A de hoja YESTERDAY
ULT_YEST = Sheets("YESTERDAY_REPORT").Range("A65536").End(xlUp).Row
ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],YESTERDAY_REPORT!R2C1:R" & ULT_YEST & "C2,9,FALSE)"
'arrastro la fórmula hasta la última celda con datos en A, hoja REPORT
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B" & ULTIMA), Type:=xlFillDefault
Range("B2").Select
End Sub
Sdos
Elsa
http://aplicaexcel.galeon.com/manual_VBA.htm
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: