Macro que busque un dato y copie la información de varias columnas que se encuentran en otra hoja

Espero puedan ayudarme lo que necesito es una macro que busque el dato que se encuentra en la columna E3 de la hoja "valores" y lo encuentre en la columna B de la hoja "descargado", en caso de encontrar coincidencia debe copiar los datos que se encuentran desde el rango M3 al Y3 de la hoja "descargado" al rango Q3 al AD3 de la hoja "valores".

Y así sucesivamente ejecutar la búsqueda de todos los valores que están en la columna E3 de la hoja "valores" .

Intenté con la siguiente macro, pero resulta muy pesada.

Sub actualiza_valores()

Set h1 = Sheets("valores")
Set h2 = Sheets("descargado")
u1 = h1.Range("C" & Rows.Count).End(xlUp).Row 'valores
U2 = h2.Range("F" & Rows.Count).End(xlUp).Row 'descargado
'
With h1.Range("r3:r" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-13]," & h2.Name & "!R3C2:R" & U2 & _
"C22,12,0 )"
.Value = .Value
End With
With h1.Range("S3:S" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-14]," & h2.Name & "!R3C2:R" & U2 & _
"C22,13,0 )"
.Value = .Value
End With
With h1.Range("T3:T" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-15]," & h2.Name & "!R3C2:R" & U2 & _
"C22,14,0 )"
.Value = .Value
End With
With h1.Range("U3:U" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-16]," & h2.Name & "!R3C2:R" & U2 & _
"C22,15,0 )"
.Value = .Value
End With
With h1.Range("V3:V" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-17]," & h2.Name & "!R3C2:R" & U2 & _
"C22,16,0 )"
.Value = .Value
End With
With h1.Range("W3:W" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-18]," & h2.Name & "!R3C2:R" & U2 & _
"C22,17,0 )"
.Value = .Value
End With
With h1.Range("X3:X" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-19]," & h2.Name & "!R3C2:R" & U2 & _
"C22,18,0 )"
.Value = .Value
End With
With h1.Range("AD3:AD" & u1)
.FormulaR1C1 = "=VLOOKUP(RC[-25]," & h2.Name & "!R3C2:R" & U2 & _
"C25,24,0 )"
.Value = .Value

End With

End Sub

Respuesta
1

Lo que comentas se puede hacer usando "BuscarV", no es necesario usar macros. Sobre la macro que intentaste usar, en realidad lo que hace es insertar formulas con "BuscarV" en algunas celdas, no es que haga y/o intente realizar el proceso que comentas.

Prueba con dicha función. Salu2 desde Lima.

Abraham Valencia

Agradezco tu comentario pero sí necesito usar macros, ya que al usar buscarv directamente mi archivo se vuelve pesado porque estoy trabajando con más de 25000 registros. Con relación a mi macro si funciona pero inserta los datos luego de buscar columna por columna, por eso quiero saber si hay alguna forma de trabajar más rápido

Estimada Charito, te aseguro que la macro que muestras ahí es lo mismo que lo que yo recomendé, la diferencia es que yo daba a entender que escribas/copies/pegues la formula y lo que tú tienes ahí lo que hace es insertarlo con código pero deja todas esas celdas tal y como, justamente, mencionas no querer.

Una alternativa con VBA es la siguiente:

Private Sub CommandButton1_Click()
Dim UltimaFilaValores  As Long, UltimaFilaDescargado As Long, BucledeBusqueda As Long, Fila As Long
Dim ValoraBuscar As String, CeldaEncontrada As Range
Let UltimaFilaValores = Sheets("Valores").Cells(Rows.Count, 5).End(xlUp).Row
Let UltimaFilaDescargado = Sheets("Descargado").Cells(Rows.Count, 2).End(xlUp).Row
For BucledeBusqueda = 5 To UltimaFilaValores
Let ValoraBuscar = Range("E" & BucledeBusqueda)
With Sheets("Descargado").Range("B2:B" & UltimaFilaDescargado)
Set CeldaEncontrada = .Find(ValoraBuscar)
If Not CeldaEncontrada Is Nothing Then
Let Fila = CeldaEncontrada.Row
Sheets("Descargado").Range("M" & Fila & ":Y" & Fila).Copy Destination:=Sheets("Valores").Range("Q" & BucledeBusqueda)
End If
End With
Next BucledeBusqueda
Set CeldaEncontrada = Nothing
End Sub

OJO, estoy asumiendo que tu botón se llama "CommandButton1".

Prueba y comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas