Optimizar copia de celdas de datos desde una hoja a otra con Macro

Hola, que tal, soy nuevo en este foro, y estoy aprendiendo a usar macros. El asunto es que debo realizar copias de celdas desde una hoja a otra, uso ciclo for, pero al ejecutarlo se me demora mas de 3 minutos. Ando buscando la forma de que sea mas eficiente, lo cual el tiempo de ejecución sea lo mínimo posible. Coloco el siguiente código explicando su función:

For a = 5 To CantFilas

' copia el primer valor en la columna a de la hoja origen y lo copia en las siguientes celdas de abajo que encuentra en la fila pegándolos en la celdas de continuas de abajo en la hoja de destino

'si la columna A hay nada datos en la celda reserva el valor
If Sheets(HojaOrigen1).Cells(a, 1) <> "" Then
reservaOT = Sheets(HojaOrigen1).Cells(a, 1)
End If
'se va copiando los datos de la hoja origen a la otra
Sheets(HojaDestino).Cells(Asig, 3) = Sheets(HojaOrigen1).Cells(a, 1)
If Sheets(HojaOrigen1).Cells(a, 1) = "" Then
Sheets(HojaDestino).Cells(Asig, 3) = reservaOT
End If
If Sheets(HojaOrigen1).Cells(a, 5) = "" Then
Sheets(HojaDestino).Cells(Asig, 3) = Sheets(HojaOrigen1).Cells(a, 1)
End If

Asig=Asig+1

Next

Tengo de forma similar varias instrucciones de código, no se si habrá alguna forma mas eficiente de hacerlo, por ejemplo usando range o algo asi. En el caso de cuando son los datos estáticos a copiar, en el cual no hay condiciones de por medio uso esta Instrucción:

Sheets(HojaOrigen1).Select
Range("H5:H550").Select
Selection.Copy
Sheets(HojaDestino).Select
Range("J7:J550").Select
Selection.PasteSpecial

Al usar esta instrucción el código se ejecuta rapido, pero que pasa cuando hay que usar sentencias If, reservar variables o algún procedimiento de por medio? Será posible transformar mi código del for, el primero de arriba a una instrucción parecida al código de abajo, o escribirlo de otra forma que sea mas eficiente al copiar los datos?
Espero que me puedas ayudar, desde ya, gracias

1 respuesta

Respuesta

He revisado tu código y concluyo que lo que haces es copiar las celdas, incluyendo las vacías (no entiendo muy bien para que almacenas el ultimo valor si finalmente es reemplazado por las celdas vacías, al igual que las comparaciones que haces... son redundantes (o eso entendí, puede que me equivoque))

Las variables a, CantFilas, HojaOrigen1, HojaDestino y asig, son capturadas en una parte del código que no incluiste, por tanto voy a suponer que ya estan definidos los valores de estas variables, con eso en claro, puedes modificar tu código (el que incluiste en la pregunta) para dejarlo solo con esta línea

Sheets(HojaOrigen1). Range(Cells(a, 1).Address & ":" & Cells(cantfilas, 1). Address).Copy Destination:=Sheets(hojadestino). Range(Cells(asig, 3). Address)

Si entendí bien, y no hemos dejado nada fuera de consideración, deberia funcionar. Me comentas como te va.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas