¿Hay alguna forma de acelerar esta macro?

En estos momentos cuento con la siguiente macro

Private Sub Filas_Click()
Dim Rng As Range
Range("A3").Activate
For i = 1 To ActiveSheet.Range("A" & Rows.Count).End(xlDown).Row
Set Rng = ActiveCell
Selection.EntireRow.Insert
Selection.EntireRow.Insert
ActiveCell.Offset(3, 0).Select
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Lo que hace es ubicarse en la celda A3, y agrega 2 filas nuevas, luego baja 3 celdas e inserta otras 2 filas y se repite ese proceso hasta que se terminen las filas con datos. El problema es que son 4000 filas aproximadamente, y la macro es muy lenta, así que quisiera saber si hay alguna forma de hacerla más rápida, o si alguién tiene otra macro que me pueda ayudar.

Respuesta
2

[Hola

Prueba así:

Sub InsertarFilas()
Application.ScreenUpdating = False
Dim UltimaFila As Long, x As Long
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
For x = UltimaFila To 3 Step -3
    Rows(x & ":" & x + 1).Insert
Next x
Application.ScreenUpdating = True
End Sub

En mi PC con 4 GB de Ram, 2 procesadores, velocidad del procesador 2.9 GHz, Office 2016 32  bits, Windows 7 64 bits:  Se demoró 0.94 segundos (menos de un segundo) en insertar 2 filas cada 3 en 4000 filas

Comentas

Abraham Valencia

Hola Abraham te comento que en mi caso la macro que me ofreces tarda un par de minutos, pero en definitiva es mucho más rápida que la macro que yo hice. Y no me explique bien, pero el resultado final que espero es que debajo de cada fila con datos existan 2 filas vacías, te debí confundir cuando dije:

 agrega 2 filas nuevas, luego baja 3 celdas e inserta otras 2 filas 

pero esos eran los pasos que hacían mi macro para llegar al resultado que te mencione, te adjunto una imagen para evitar confundirte de nuevo

[Hola

Era cuestión de solo cambiar una línea:

For x = UltimaFila To 3 Step -1

Prueba.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas