Como agilizar los siguientes comandos de una macro

Necesito agilizar los siguientes comandos partes de una macro, ya estos en la macro tardan muchísimo en realizar los cálculos por que son muchas las filas en donde lo realiza y son siempre muy variables a más.

Gracias

Range("F2:G2").AutoFill Destination:=Range("F2:G" & Range("A" & Rows.Count).End(xlUp).Row)
    Range("G2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.NumberFormat = "m/d/yyyy"
    Range("F2:G2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
1

1 respuesta

Respuesta
3

Si la hoja tiene muchas fórmulas, conviene pasar el cálculo a modo manual antes de arrastrar las celdas y luego volverlo a automático:

Sub mejorarMacro()
'guardar la última fila para no tener que escribirlo en cada línea
finx = Range("A" & Rows.Count).End(xlUp).Row
Application.Calculation = xlCalculationManual
'rellenar filas
Range("F2:G2").AutoFill Destination:=Range("F2:G" & finx)
Application.Calculation = xlCalculationAutomatic
'asignar formato
Range("G2:G" & finx).NumberFormat = "m/d/yyyy"
'copiar/pegar solo valores
Range("F2:G" & finx).Copy
Range("F2:G" & finx).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

Te hice otros cambios por si el fin de rango de la col G es el mismo que en col A.

Elsa muchas gracias por tu aporte.

Pero aun no puedo agilizar la ejecución, sigue tardando mucho en calcular las columnas F y G.

La columna A tiene las misma cantidad de filas que la FyG.

Para que te des una idea el archivo contiene 27288 filas y siempre varian.

Abra alguna otra forma?

 Gracias

Si tenés la instrucción que pasa el cálculo a modo manual antes de rellenar las filas es todo lo que se puede agregar. Esto evita que el cálculo se haga en cada celda rellenada y se hacen todos al final. Eso ya debiera reflejar una gran diferencia. La siguiente instrucción pasa todo el rango a valores por lo que aquí no hay nada para mejorar.

Solo vamos a darle al inicio el formato a la primera celda ya que al arrastrar debiera mantenerlo y así evitas un proceso innecesario.

Ahora, si tenés esa cantidad de filas también tiene que ver el tipo o velocidad del procesador con que trabajas.

Sub mejorarMacro()
'x Elsamatilde
'guardar la última fila para no tener que escribirlo en cada línea
finx = Range("A" & Rows.Count).End(xlUp).Row
'asignar formato
Range("G2").NumberFormat = "m/d/yyyy"
'pasar a modo manual
Application.Calculation = xlCalculationManual
'rellenar filas y volver a modo automático
Range("F2:G2").AutoFill Destination:=Range("F2:G" & finx)
Application.Calculation = xlCalculationAutomatic
'copiar/pegar solo valores
Range("F2:G" & finx).Copy
Range("F2:G" & finx).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
'quitar el modo de copiado/pegado
Application.CutCopyMode = False
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas