Optimizar macro VBA para disminuir tiempo de ejecución

Buenas tardes, solicito de la ayuda de algún experto para optimizar una macro que tengo, ella realiza muy buen su tarea. Pero su tiempo de ejecución en mi computador supera el minuto aproxmente y no se si sea posible optimizarla para que lo haga en un menor tiempo. Ya que en ocasiones me han ayudado con otras y si se ha podido.

Lo que hace la macro básicamente es del rango del lado derecho donde están los números separados, los copia y pega en el segundo rango de manera que quedan juntos. Debo de informar que cada rango consta de 1.000 columnas. Y la macro ejecuta con los datos que tiene hasta el final, en este caso tiene 2.000 filas con datos. Pero tal vez pueda hacerlo en menos tiempo ya que solo básicamente copia y pega simplemente eliminando las celdas vacías.

 Sub pegarP()
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
With Range("A10").CurrentRegion 'CELDA INICIAL
    f = .Rows.Count
    c = 1000 'NUMERO DE CELDAS
End With
Set numeros = Range("A10").Resize(f - 1, c) 'CELDA INICIAL
Set resultado = Range("ALQ10").Resize(f - 1, c) 'CELDA DONDE EMPIEZA A PEGAR
matriz = resultado
For i = 1 To f - 1
x = 1
    For j = 1 To c
        numero = numeros.Cells(i, j)
        If IsNumeric(numero) Then
            matriz(i, x) = numero
            x = x + 1
    End If
    Next j
Next i
Range(resultado.Address) = matriz
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

esta es la macro que estoy usando actualmente, tal vez si haya que incluirle o excluirle algo, o una nueva que ejecute en menor tiempo seria genial, me ahorraria mucho tiempo porque la macro se reejecuta cerca de 2.000 veces entonces alli se demora horas en realizar su tarea.

3 respuestas

Respuesta
2

Al parecer tu imagen no corresponde a la macro.

En la imagen, la celda "inicial" es B2, pero en tu macro dice celda A10:

With Range("A10").CurrentRegion 'CELDA INICIAL

Tampoco entiendo cómo pasan los datos del rango de la izquierda a la derecha. En tu imagen no se aprecia.


Lo que puedes hacer es una matriz con los números de la izquierda y no leer los datos de las celdas.

Prueba esto:

 Sub pegarP()
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With
With Range("A10").CurrentRegion 'CELDA INICIAL
    f = .Rows.Count
    c = 1000 'NUMERO DE CELDAS
End With
Set numeros = Range("A10").Resize(f - 1, c) 'CELDA INICIAL
Set resultado = Range("ALQ10").Resize(f - 1, c) 'CELDA DONDE EMPIEZA A PEGAR
matriz = resultado
matriznum = numeros.Value
For i = 1 To f - 1
x = 1
    For j = 1 To c
        'numero = numeros.Cells(i, j)
        numero = matriznum(i, j)
        If IsNumeric(numero) Then
            matriz(i, x) = numero
            x = x + 1
    End If
    Next j
Next i
Range(resultado.Address) = matriz
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

Si no funciona, podrías comentar sobre mis dudas del inicio. De lo contrario, ya sabes qué hacer.

Te cuento que esa que me enviaste ejecuta mucho más rápido, la anterior se tardaba según los recursos de mi computador aprox 50 segundos, ahora tarda 15 segundos, entonces si redujo su tiempo de ejecicion, con aquello que me preguntabas la cenda A si corresponde al rango, solo que en ese ejemplo que envíe se encontraban vacías, pero como tiene 2.000 fillas hay algunas que si tiene datos, y el orden de las tablas, efectivamente copia los datos del rango de la izquierda alrango de la derecha, porque si te fijas en el rango izquierdo están separados con celdas vacías y en el rango derecho es donde la macro pega esos datos pedo sin las celdas vacías.

De igual forma quede a gusto con la macro ya que su tiempo se disminuyo mucho. Te agradezcomucho, en caso de que tu creas que se puede optimizar aun más seria genial, pero si por el grande de los datos es lo max que se puede optimizar entonces igualmennte quedo muy a gusto, mil gracias, bendiciones Dante.

Respuesta
1

¿Para qué utiliza la numeración?. Excel no es mi campo.

Es un trabajo de estadística para números aleatorios que llevo desempeñando ya algún tiempo. :)

Tengo algo con un grado de dificultad en Access para elaborar boletos en forma aleatoria, Siga este link Numerador Rifas y Folios - Video 1 - YouTube

Respuesta
-1

Comfort is the key. You will never see a person who is dressed properly in the top fashion wear something that is not comfortable. https://chatteriedestroisnobel.fr/2022/01/27/1355/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas