Macro que funciona pero es demasiado lenta
Tengo un libro de excel, con tres hojas (Hoja1, Hoja2 y Hoja3), en la Hoja1 tengo las columnas A (NUMERO), B (ORDEN), C (PAGADA), DE (NºFACTURA), E (FECHA), F (PROTOCOLO), G (N.I.F.), H (CLIENTE), I (IMPORTE), J (CÓDIGO), es decir 10 columnas; en la hoja2 y hoja3 la mismas cabeceras. En la hoja1 tengo todos los datos, con aproximadamente 10.000 líneas actualmente, pero aumentando. Yo quiero que poniendo una serie de datos, en la columna 4 de la hoja2, me lo busque en la hoja1, y lo encontrado me lo ponga en la hoja3.
Yo actualmente tengo una macro, que es la siguiente, pero es muy lenta, porque tiene que ir comparando en 10000 registros.
Sub Buscar()
Application.ScreenUpdating = False
Dim filah1, filah2, filah3 As Integer
Dim dato1, dato2 As Integer
filah1 = 2
filah2 = 2
filah3 = 2
'Borra el contenido de la Hoja3
Call Borrar
While Sheets("Hoja2").Cells(filah2, 4) <> Empty
While Sheets("Hoja1").Cells(filah1, 4) <> Empty
' dato1 = Sheets("Hoja2").Cells(filah2, 4)
' dato2 = Sheets("Hoja1").Cells(filah1, 4)
If Sheets("Hoja2").Cells(filah2, 4) = Sheets("Hoja1").Cells(filah1, 4) Then
Sheets("Hoja1").Select
Sheets("Hoja1").Cells(filah1, 4).Select
ActiveCell.Rows("1:1").EntireRow.Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Sheets("Hoja3").Cells(filah3, 1) = Sheets("Hoja1"). Cells(filah1, 1)
Sheets("Hoja3").Cells(filah3, 2) = Sheets("Hoja1"). Cells(filah1, 2)
Sheets("Hoja3").Cells(filah3, 3) = Sheets("Hoja1"). Cells(filah1, 3)
Sheets("Hoja3").Cells(filah3, 4) = Sheets("Hoja1"). Cells(filah1, 4)
Sheets("Hoja3").Cells(filah3, 5) = Sheets("Hoja1"). Cells(filah1, 5)
Sheets("Hoja3").Cells(filah3, 6) = Sheets("Hoja1"). Cells(filah1, 6)
Sheets("Hoja3").Cells(filah3, 7) = Sheets("Hoja1"). Cells(filah1, 7)
Sheets("Hoja3").Cells(filah3, 8) = Sheets("Hoja1"). Cells(filah1, 8)
Sheets("Hoja3").Cells(filah3, 9) = Sheets("Hoja1"). Cells(filah1, 9)
Sheets("Hoja3").Cells(filah3, 10) = Sheets("Hoja1"). Cells(filah1, 10)
filah3 = filah3 + 1
End If
filah1 = filah1 + 1
Wend
filah2 = filah2 + 1
filah1 = 2
Wend
Application.ScreenUpdating = True
End Sub
Mi pregunta es si habría la posibilidad, de hacerlo con otras instrucciones que hicieran el proceso de búsqueda más rápido.