Como optimizar macro en excel

Tengo esta macro que me funciona bien, pero es un poco lenta, lo otro es que la macro en una parte que tengo que organizar los resultados donde los pego me toca organizar de la z-a para que no me tome los valores = 0, si se puede hacer algo pero igual pues no es que sea algo con lo que no pueda trabajar. Les dejo el codigo para que me ayuden por favor mi gracias.

Sub BUSCA_MATERIAL()

'

Application.ScreenUpdating = False

' BUSCA_MATERIAL Macro

    Range("Z1").Select

    Selection.AutoFill Destination:=Range("Z1:Z5500"), Type:=xlFillDefault

    Range("Z2:Z5500").Select

    Selection.Copy

    Range("J9").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Application.CutCopyMode = False

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("J9"), _

        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    With ActiveWorkbook.ActiveSheet.Sort

        .SetRange Range("J9:J5600")

        .Header = xlNo

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

    Range("Z2:Z5500").Select

    Selection.Delete Shift:=xlUp

    Range("J9").Select

End Sub

Respuesta
1

Luis que tal, he probado tu macro y por lo menos a mi no me trabaja lento, pero si deseas optimizarla un poco puedes hacer mas directas algunas instrucciones en lugar de seleccionarlas y luego darles la acción. Te dejo el ejemplo de como quedaría

Sub BUSCA_MATERIAL()

Application.ScreenUpdating = False

Set SourceRange = Range("Z1")
Set FillRange = Range("Z1:Z5500")

SourceRange.AutoFill Destination:=FillRange, Type:=xlFillDefault

Range("Z2:Z5500").Copy
Range("J9").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False

Application.CutCopyMode = False

ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("J9"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With ActiveWorkbook.ActiveSheet.Sort

.SetRange Range("J9:J5600")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

Range("Z2:Z5500").Delete shift:=xlUp
Range("J9").Select

End Sub

Si aún así tu macro está lenta por favor comenta explícitamente que deseas hacer y buscamos alguna alternativa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas