Bucle for en Macro VBA Excel

Esta es mi primer pregunta aquí, si esta mal posicionada pido perdón no conozco bien la página, yo estoy trabajando en una base de datos en excel para el trabajo y tengo una planilla con 25000 filas y 12 columnas, cuando hago un bucle For ... Next para que me oculte las filas que están vacías tarda un barbaridad, no se cuanto tarda porque lo cancelo, y tengo un Core de 4 núcleos en mi casa, en fin, mi pregunta es si hay alguna forma de que lo haga mas rápido porque las pc del trabajo son muy lentas. Uso la siguiente sentencia:

For X=1 to 25000

If cells(x,1).text = "" then

rows(x).select

selection.entirerow.hidden = true

Else

rows(x).select

selection.entirerow.hidden = false

End if

Next

De saber alguna forma de que lo haga mucho mas rápido se los agradecería mucho.

1 respuesta

Respuesta
1

Prueba con esta macro y me cuentas:

Sub filas()
For x = 1 To 25000
If Application.WorksheetFunction.CountA(Rows(x)) = 0 Then Rows(x).EntireRow.Hidden = True
Next
End Sub

un saludo y recuerda la finalización de la consulta.

Te agradezco la respuesta pero es igual de lenta que la otra, a mi parecer es el bucle For que lo lee de esa manera, porque no puede ser que vaya tan lento en cualquier Pc, no se como aplicarlo de otra forma; con el While ... Wend es exactamente lo mismo. Capaz que hago mal algo, no se.

De todas formas muchas gracias por el consejo. Espero tu respuesta a ver si hay otra manera, yo no la encontré, sino puntúo y finalizo.

Gracias

Atentamente: MarNiko

Otro consejo: inserta una columna nueva al principio y en cada celda escribe un CONTARA de cada una de las filas después arrastras la fórmula hacia abajo. Con esto tendrás un contador de celdas y habrá muchas con importe cero y esas son las que tenemos que eliminar. Ordena toda tu tabla con el campo nuevo que acabamos de insertar colocando los ceros al principio o al final... solo queda eliminar todas las filas que tengan un cero.

Esto es manual pero muy rápido (y no es lento).

Gracias por la respuesta pero la única manera que conseguí acelerarlo bastante es agregando esto al principio del comando

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

y esto al final de comando

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

esto hace que no se actualice la pantalla a medida que se ejecuta el código y asi lo acelera de manera muy significativa, mi trabajo de 24000 filas en mi máquina pasó a procesarlo en 1 min.

Muchas gracias por su cooperación, espero su respuesta y finalizo.

Atte: MarNiko

Enhorabuena, te mando un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas