Excel - Optimizar Macro: Evitar mostrar valores en Excel

 
Vista:

Optimizar Macro: Evitar mostrar valores en Excel

Publicado por Cesar (6 intervenciones) el 19/12/2008 22:21:11
Hola, estoy haciendo una macro que hasta el momento funciona, sin embargo necesito optimizar el tiempo que demora en realizar algunos procedimientos.

El gran problema surge cuando quiero guardar muchos valores, ya que la macro que estoy haciendo tiene que guardar en cada iteración unos 150000 valores (tipo double) en diferentes hojas de un libro de Excel. Al momento de ESCRIBIRLOS en Excel, la macro se demora muchísimo, he estado buscando algún comando que pueda evitar que los valores que quiero guardar se muestren o algo que me permita mejorar el tiempo de procesamiento de la macro (ya que se demora más en escribir los valores en la hoja de Excel que en obtenerlos), pero no he encontrado nada.

Si alguien tiene alguna idea de como puedo hacer que al momento de escribir los valores no se demore tanto o si existe alguna forma eficiente de guardar tal cantidad de datos, respóndame porfavor.

De antemano muchas gracias.

César
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por Edwi (57 intervenciones) el 20/12/2008 01:12:52
Yo tambien trabajo con cantidad de datos y se lo que es que una macro se demore. Basado en mi experiencia te permito recomendarte dos cosas:

1.- Cuando se trate de cantidad de datos, usa access o alguna base de datos, para tratarlas, consultarlas, almacenarlas, etc.

2.- Si es inevitable usar excel, podrias evitar que haga cálculos automaticos la hoja en cuestion, porque en realidad lo que demora no es escribir, sino actualizar las referencias que pueda tener ese rango determinado. En la macro que hagas, en una de las primeras lineas, "deshabilita" el cálculo automático, ponlo manual, cuando acabe la macro, vuelvelo a su posición normal. Habilitado.

Usa esto:

Application.Calculation = xlManual
' ' ' cuerpo de la macro
Application.Calculation = xlCalculationAutomatic

Espero te sirva.

Saludos desde Omate/Moquegua/Perú, donde se comen las paltas mas ricas y se toma el vino mas delicioso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por Santiago (193 intervenciones) el 20/12/2008 05:38:20
Esta bien los pasos de Edwi, puedes probar con Application.ScreenUpdating :-)

Un saludo desde Ambato, Ecuador
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por JuanC (1237 intervenciones) el 20/12/2008 11:12:08
sería interesante ver todo el código, porque también tiene que ver el método que se utiliza para escribir esos valores
si quieres enviarme el archivo no tengo inconvenientes en verlo...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por cesar (6 intervenciones) el 20/12/2008 21:43:59
Muchas gracias por sus respuestas.

JuanC, no creo que tengas tiempo de revisar mi código completo tiene más de 1000 líneas de comando y llama a otras aplicaciones como API SAP2000 v12 y otras más con comandos de programación específicos de cada aplicación.

Pero lo importante y creo que realmente interesa es la forma en cómo escribo los resultados en las hojas de Excel y lo que hago es simplemente una vez que obtengo un vector de resultados que me interesa guardar (por lo general de 150 mil valores) hago un "for" que recorra todo ese vector y copie uno a uno los valores en cada una de las celdas de Excel, es decir:

Supongamos que quiero guardar los resultados del vector U1 (que tiene 150000 valores) para traspasar esos valores a la Hoja 1 de excel lo que hago es

Sheets("Hoja 1").Select
For i = 1 To 150000
Cells(i, 1).Value = U1(j - 1)
Next i

En verdad no sé si existe otra forma más eficiente de traspasar todos estos datos, sin embargo usando Application.ScreenUpdating el tiempo que demora en llevar los valores de U1 a la hoja de Excel e iniciar otra iteración y volver a calcular U1 con otros parámetros es, en promedio, de 2 minutos y 15 segundos, lo cual es 6 veces menos tiempo que sin usar Application.ScreenUpdating = False.

Tal vez exista una forma mucho más eficiente de guardar los datos, pero creo que es razonablemente bueno para la cantidad de valores y tiempo de procesamiento que lleva calcular U1.

Saludos desde Santiago, Chile.

César
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por JuanC (1237 intervenciones) el 21/12/2008 11:28:56
prueba con esto

[A1:A150000] = Application.WorksheetFunction.Transpose(U1)

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizar Macro: Evitar mostrar valores en Exce

Publicado por cesar (6 intervenciones) el 20/12/2008 21:10:29
Gracias por tu respuesta, sí funciona y disminuye el tiempo entre que se guardan los datos en Excel y la siguiente iteración.

También funciona Application.ScreenUpdating, es decir coloco al principio del código

Application.ScreenUpdating = False
' líneas de código, bla bla bla
' bla bla bla
' al final de todo el código
Application.ScreenUpdating = True
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar