¿Cómo puedo agilizar un código de filtrado de datos?
Todoexpertos", tengo un gran problema con una rutina para filtrar registros. El problema es que dicha rutina me dura mucho en terminar y arrojar resultados, me preguntaba si alguien me pudiera orientar para que me corra más rápido.
Describiendo un poco más...
Hojas involucradas:
ENT!= Hoja de entradas de material
FILENTR!= Hoja donde se filtran los registros, dentro de esta hoja se encuentran 4 celdas en las que escribo los datos y luego ejecuto la macro con un botón. Dichas celdas son "B1, B2, B3, B4".
B1= Nombre de proveedor del material
B2= Código del material
B3= Fecha 1,( desde)
B4= Fecha 2, (Hasta)
Este es el código que utilizo para filtrar:
Sub filtro_entradas()
On Error Resume Next
Sheets("FILENTRADAS").Select
codigo = [b2]
Range("a11:J1000000") = ""
Application.ScreenUpdating = False
With Sheets("ENT")
' si se omite la fecha inicial se toma la fecha menor de la Hoja ENTRADAS
If [b3] = "" Then
fecha1 = CDate(WorksheetFunction.Min(.Range("G11:G1000000")))
Else
fecha1 = CDate([b3])
End If
' si se omite la fecha final se toma la fecha mayor de la Hoja ENTRADAS
If [b4] = "" Then
fecha2 = CDate(WorksheetFunction.max(.Range("G11:G1000000")))
Else
fecha2 = CDate([b4])
End If
'si se omite un codigo entonces filtrar todos los registros comprendidos entre las fechas seleccionadas
If [b2] = "" Then
For a = 11 To .Range("a1000000").End(xlUp).Row
If CDate(.cells(a, 7)) >= fecha1 And CDate(.cells(a, 7)) <= fecha2 Then
rw = Range("a10:a1000000").Find("").Row
For b = 1 To 10
cells(rw, b) = .cells(a, b)
Next b
End If
Next a
Else
'filtrar registros con las fechas y codigos indicados
For a = 11 To .Range("a1000000").End(xlUp).Row
If .cells(a, 1) = codigo And CDate(.cells(a, 7)) >= fecha1 And CDate(.cells(a, 7)) <= fecha2 Then
rw = Range("a10:a1000000").Find("").Row
For b = 1 To 10
cells(rw, b) = .cells(a, b)
Next b
End If
Next a
End If
End With
Application.ScreenUpdating = True
End Sub
Sub filtro_entradas1()
On Error Resume Next
Sheets("FILENTRADAS").Select
codigo = [b1]
Range("a11:J1000000") = ""
Application.ScreenUpdating = False
With Sheets("ENT")
' si se omite la fecha inicial se toma la fecha menor de la Hoja ENTRADAS
If [b3] = "" Then
fecha1 = CDate(WorksheetFunction.Min(.Range("G11:G1000000")))
Else
fecha1 = CDate([b3])
End If
' si se omite la fecha final se toma la fecha mayor de la Hoja ENTRADAS
If [b4] = "" Then
fecha2 = CDate(WorksheetFunction.max(.Range("G11:G1000000")))
Else
fecha2 = CDate([b4])
End If
'si se omite un codigo entonces filtrar todos los registros comprendidos entre las fechas seleccionadas
If [b1] = "" Then
For a = 11 To .Range("a1000000").End(xlUp).Row
If CDate(.cells(a, 7)) >= fecha1 And CDate(.cells(a, 7)) <= fecha2 Then
rw = Range("a10:a1000000").Find("").Row
For b = 1 To 10
cells(rw, b) = .cells(a, b)
Next b
End If
Next a
Else
'filtrar registros con las fechas y codigos indicados
For a = 11 To .Range("a1000000").End(xlUp).Row
If .cells(a, 8) = codigo And CDate(.cells(a, 7)) >= fecha1 And CDate(.cells(a, 7)) <= fecha2 Then
rw = Range("a10:a1000000").Find("").Row
For b = 1 To 10
cells(rw, b) = .cells(a, b)
Next b
End If
Next a
End If
End With
Application.ScreenUpdating = True
End Sub
Espero alguien me pueda ayudar, puesto que es lo único que necesito para terminar, se los agradecería mucho. De antemano muchas gracias amigos. Saludos a todos.
P. D El archivo que tengo pesa aproximadamente 700 kb, contiene más o menos unas 15 hojas, intenté probar el código copiando sólo las dos hojas en uso del filtro a un nuevo libro con todo y su código y en el nuevo libro con sólo las dos hojas me corre rápido, pero en el que contiene todas las hojas se demora mucho.