Vous êtes sur la page 1sur 17

14 formas de acelerar y optimizar tus macros excel

Esta informacin es muy til para quienes manejen el tema de programacin de macros excel. Tus macros van lentas? Problemas a la hora de ejecutarlas? Cules son las tcnicas recomendadas? Cuando de programacin de macros excel se trata, el tema de la eficiencia y la velocidad es clave. Hay 2 leyes fundamentales que hay que recordar: . a. Cuanto menos cdigo tiene una macro mejorpor qu? Ayuda a que la macro se ejecute mucho ms rpido Simplifica la tarea a la hora de modificar/ampliar/reparar la macro . b. Cuanto ms rpido se ejecuta una macro mejor!por qu? Mejora la experiencia del usuario No mantiene la PC ocupada tanto tiempo

Respecto de usar menos cdigo depender de las habilidades del programador excel en cuestin. Hemos visto infinidad de casos donde 30 o 40 lneas de cdigo VBA se pueden resumir en 5 o 6 lneas (algo similar pasa con las frmulas excel). Siempre hay macros o frmulas que hacen la tarea de forma ms directa y sin dar tantas vueltas! Otra recomendacin clave es invertir mucho tiempo inicial en planificar y analizar la lgica del trabajo. Esto nos va a ahorrar muchos problemas y dolores de cabeza posteriores! Hay algunas instrucciones puntuales que siempre conviene usar y que van a acelerar y optimizar nuestras macros en todos los casos. Vamos a ver repasar algunas tcnicas puntuales que podemos usar al comienzo, durante y al final de nuestras macros. . AL COMIENZO DE LAS MACROS

1. Apagar el parpadeo de pantalla Lo hacemos con la instruccin: Application.screenupdating=False Evita los movimientos de pantalla que se producen al seleccionar celdas, hojas y libros

2. Apagar los clculos automticos Lo hacemos con la instruccin: Application.calculation=xlCalculationManual Evita que se recalcule todo cada vez que se pegan o modifican datos

3. Apagar los eventos automticos Lo hacemos con la instruccin: Application.EnableEvents=False Evita que se disparen macros de evento si las hubiere

4. Apagar visualizacin de saltos de pgina Lo hacemos con la instruccin: ActiveSheet.DisplayPageBreaks = False Sirve para evitar algunos problemas de compatibilidad entre macros Excel 2003 vs. 2007/2010 En resumen, siempre debemos comenzar las macros as: Application.screenupdating=False Application.calculation=xlCalculationManual Application.EnableEvents=False ActiveSheet.DisplayPageBreaks = False . AL FINAL DE LAS MACROS

5. Borrar contenido de portapapeles Lo hacemos con la instruccin: Application.CutCopyMode = False Permite limpiar el portapapeles en caso de haber copiado datos Adems debemos volver a su estado original las instrucciones con las que comenzamos la macro. En resumen, siempre debemos finalizar las macros as: Application.screenupdating=True Application.calculation=xlCalculationAutomatic Application.EnableEvents=True ActiveSheet.DisplayPageBreaks = True Application.CutCopyMode = False . OTRAS TECNICAS UTILES

6. Usar la instruccin WITH Se usa para evitar tener que referenciar un mismo objeto muchas veces Ejecucin leeenta Sheets(1).Range(A1:Z1).Font.Italic = True Sheets(1).Range(A1:Z1).Font.Interior.Color = vbRed Sheets(1).Range(A1:Z1).MergeCells = True

Ejecucin rpida! With Sheets(1).Range(A1:Z1) .Font.Italic = True .Font.Interior.Color = vbRed .MergeCells = True End With

7. Evitar la instruccin SELECT Se genera sobre todo en las macros grabadas La mayora de las veces no es necesario seleccionar para cumplir el objetivo Ejecucin leeenta Range(E1).Select Selection.Copy Range(D10).Select ActiveSheet.Paste

Ejecucin rpida! Range(E1).Copy Range(D10)

8. Evitar loops FOR EACH Tener que ir celda por celda consume mucho tiempo Se puede resolver el problema de forma ms directa! Ejecucin leeenta For Each cell In Range(A1:A10000) If cell = Empty Then cell = 0 Next cell

* Los loops siempre son leeentos * En este caso recorre 10.000 celdas! Ejecucin rpida! Existen diversas formas de evitar los loops. La solucin depender del caso concreto en cuestin. Generalmente se usan algunas de estas tcnicas: agrupar, ir a especial, filtros, filtros avanzados. La idea es poder realizar la accin sobre todos los elementos al mismo tiempo, en lugar de tener que ir uno a uno! 9. Usar las funciones nativas de Excel No quieras reinventar la rueda. Quizs ya exista una funcin Excel que lo haga! Las macros siempre ejecutan ms rpido las funciones nativas de Excel Ejecucin leeenta mProducto = 1 For i = 1 to 100 mProducto = mProducto * Cells(3,i) Next Ejecucin rpida! mProducto = Application.WorkSheetFunction.Product(Range(C1:C100))

10. Forzar la declaracin de variables En el editor VBA, men Herramientas > Opciones > pestaa Editor > marcar Requerir declaracin de variables Luego usar la variable correcta: si es fecha usar Date, si es texto usar String, si es valor usar Long Evitar el uso de la variable Variant ya que insume ms recursos Usar nombres de variables que nos digan algo (por ej. UltimaFila o FilaZ en lugar de f o uf) 11. Escribir las macros en mdulos y no en hojas Las hojas pueden ser borradas o copiadas y esto generara problemas inesperados 12. Separar el proceso en varias macros (divide y conquistars) Si tu macro hace muchas cosas conviene separarla en muchas macros pequeas y luego unirlas Es ms fcil para controlar, auditar, etc Adems te permite luego poder rehusar alguna parte del proceso en otras macros

Macro muy laaarga Sub MegaMacro() Codigo limpia datos Codigo carga datos Cdigo arregla datos Cdigo arma reporte End Sub()

Mejor dividir en diferentes macros para cada proceso Sub LimpiaDatos() Codigo End Sub Sub CargaDatos() Codigo End Sub Sub ArreglaDatos() Codigo End Sub Sub ArmaReporte() Codigo End Sub

Finalmente podemos unir todos los procesos Sub ProcesoCompleto() Call LimpiaDatos Call CargaDatos Call ArreglaDatos Call ArmaReporte End Sub() 13. Ser cuidadoso con la instruccin ON ERROR RESUME NEXT Esta instruccin hace que la macro siga avanzando aunque encuentre un error En algunos casos esto har que se ignoren errores que no deberan ser ignorados Podras tener errores (bugs) y no enterarte! 14. Comentar bien las macros Qu pasara si tuvieras que volver a revisar/arreglar/ampliar tu cdigo 8 meses despus? Aadir comentarios te ayudar a describir y recordar la lgica y te ahorrar mucho tiempo!

Comparte tus propias tcnicas para acelerar y optimizar macros! Djanos tus comentarios!

. 58

Informacin relacionada:

Qu son las Macros Excel? Coleccin de macros Excel Desarrollo Excel a medida Programacin de Macros Excel Manual de Macros Excel

91 respuestas a 14 formas de acelerar y optimizar tus macros excel Comentarios nuevos

losvangoh dice: Martes, 25 de septiembre del 2012 en 18:25 UFFFFF, Estimado, me salvaste la vida y el mes en mi chamba, gracias por compartir tus conocimientos, los que quedarn ms cimentados si nos hicieras el favor de poner ejemplos en todas tus observaciones. Espero yo tambin poder colaborar (aunque soy novel en esto de las macros). Saludos Responder

ramon dice: Viernes, 28 de septiembre del 2012 en 04:56 Tengo una macro QUE en excel 2003 que corre muy rapida basicamente lo que hace es copiar una formula en una columna.. copiar esa columna en la siguiente columna, copiar a solo valores la anterior (para que no queden formulas una vez

hecho el calculo) y asi sucesivamebte hasta 100 columnas. eso si . son 50.000 filas Eso en excel 2003 corre muy bien .. PERO EN EXCEL 2007 SE SATURA Y EMPIEZAN A SALIR RECURSOS INSUFICIENTES HE PROBADO DE CONVERTIR LOS .XLS A XLSM.. PERO NO GANO NADA, SIGUE SALIENDO EL MENSAJE DE RECURSOS INSUFICIENTES porque se satura el excel 2007? ME VEO OBLIGADO A VOLVEER A EXCEL 2003? Responder

todoexcel dice: Viernes, 28 de septiembre del 2012 en 07:35 Consulte en nuestro foro de macros y adjunte su macro. Salu2.xls

Edgar L dice: Jueves, 22 de noviembre del 2012 en 17:42 Respondiendo a Ramon, porque no al momento de guardar tu macro de excel, la guardas como binario, esto reducira el tamao del archivo pero no afectara tu archivo. ARCHIVO.xlsb asi te permitira correr la macro facilmente sin consumir tantos recursos

TITO dice: Lunes, 29 de octubre del 2012 en 12:10 quiza tengas que convertir el libro excel para que deje de estar en modo compatibilidad.

Saludos Responder

CAMILA dice: Mircoles, 7 de noviembre del 2012 en 11:01 QUE ES INTERESANTE APRENDER SOBRES LAS FUNCIONES DE LOS MACR0S Responder

Laura dice: Jueves, 15 de noviembre del 2012 en 14:24 Hoola a todos, a m me pasa algo parecido a Ramn despus de convertir un montn de archivos del 2003 al 2007 con sus macros (he pasado de xls a xlsm o xlsx). al arrastrar las frmulas de las casillas a la derecha del todo me dice recursos insuficientes. voy poco a poco arrastrando.. grabando a la vez para as guardar los datos.y ahora cuando cierro el archivo ya no me abre, se puede quedar como 10 min. oooh ms pensando. La sensacin que tengo es que no soporta tantas frmulas?? es correcto?? si es as, para que tenemos un excell con tantas celdas..??? Responder

Edgar L dice: Jueves, 22 de noviembre del 2012 en 17:50 Hola Laura,

Porque no guardas tus archivos desde el 2007 como archivos binarios, esto te reduce considerablemente el tamao del archivo que estas manejando, ademas de que al momento de ejecutar no consumira tantos recursos, y para cuando quieras guardar tu archivo solo tardara unos instantes, esto a servido porque no afecta al archivo. Saludos.

Norma dice: Viernes, 23 de noviembre del 2012 en 15:21 Excelente aporte! gracias! Responder

Pingback: Annimo

David dice: Martes, 25 de diciembre del 2012 en 10:04 excelente me ha salvado en cuanto ahorro de tiempo,gracias por tu ayuda Responder

fadia dice: Domingo, 13 de enero del 2013 en 03:00 hola, sera que alguien me podria ayudar con esto? tengo un archivo de excel con macros. al abrirlo me sale un error de compilacion en modulo oculto: General TD y no me permite utilizar los complementos, alguien sabe que puedo hacer? gracias Responder

todoexcel dice: Domingo, 13 de enero del 2013 en 17:05 Consulte en nuestro foro! Salu2

CarlosR2 dice: Mircoles, 27 de febrero del 2013 en 14:25 Excelente aporte maestro, gracias por todo ! Responder

Alfonso Pineda dice: Martes, 5 de marzo del 2013 en 15:41 Agradezco tu aportacion, la verdad es que venia trabajando diferente, lo voy a aplicar y espero corra mucho mas rpido.

Responder

Roberto Maradiaga dice: Jueves, 7 de marzo del 2013 en 17:19

Hola. Tengo una macro que hice en excel 2010, pero por razones de equipo ahora utilizo el ofice 2007, la macro corre bien pero no me realiza el proceso completo, me genera datos basura. Pregunto, Acaso las macros hechas en office 2010, no son compatibles del todo con el office 2007? O a caso el Office 2007 no tiene las misma funciones del 2010 para ejecutar correctamente la macro? Como resuelvo esto? Responder

todoexcel dice: Jueves, 7 de marzo del 2013 en 18:02 Nosotros no hemos detectacto incompatibilidad de macros en Excel 2007 vs. Excel 2010. Habra que ver en detalle su macro. Consulte en nuestro foro!

Juan Fernando Arroyave dice: Domingo, 7 de abril del 2013 en 18:01 Amigo, ustedes son los verdaderos expertos. Los que comparten el conocimiento sin esperar nada a cambio. muchas gracias por esta informacin tan valiosa Responder

Gerard dice: Martes, 16 de abril del 2013 en 19:55 Hola. Excelente Post.Gracias por compartir.

Solamente me queda una dudaEn la macro que estoy programando deshabilito la actualizacion automaticaDespues Creo Una serie de formulas y las pego desde el segundo hasta el ultimo renglonSin embargo cuando la macro finaliza los valores no se actualizan. Y de esta forma al final me veo obligado a presionar f9 y pierdo todo el tiempo que gane Es una archivo de 53mil renglonesAlguna sugerencia??? saludos Responder

todoexcel dice: Mircoles, 17 de abril del 2013 en 18:52 Haga que la macro calcule con la instruccin application.calculate (eso es equivalente al F9) Salu2

Gerard dice: Mircoles, 17 de abril del 2013 en 19:59 Mmmm ya agregue la instruccion pero no refresca los valoresMe imagino que tendra que ver con el Application.Calculation = xlCalculationManual que puse al inicio? saludos Responder

Jacvar dice: Lunes, 22 de abril del 2013 en 00:19

Hola, quisiera que alguien pudiese ayudarme, he hecho una serie de macros que buscan datos en una BD SqlServer y los copias en hojas de excel, luego con los datos de las hojas aplico calculos entre ellos, pero tengo un problema, debo ejecutar dos o tres veces las macros porque al parecer no actualiza los datos de una vez si cambio los parametros de consulta (los cuales estan en una hoja). Me sigue mostrando los adatos anteriores. existe alguna forma de borrar los datos que quedan en memoria o algo asi por el estilo. Gracias Responder

todoexcel dice: Lunes, 22 de abril del 2013 en 09:26 Consulte en nuestro foro de macros

Mensajes Cristianos dice: Lunes, 22 de abril del 2013 en 13:59 Buenas Tardes, gracias por estos tips, me sirvieron de mucha ayuda. he mejorado la rapidez en un 300% o mas, se puso muy rapida mi macro, saludos y que Dios le bendiga Responder

Eduardo Pia dice: Viernes, 26 de abril del 2013 en 14:43

hola, tengo una macro la cual me busca datos en mi base de datos, pero se detiene a cada rato si no encuentra un datos y necesito que la macro siga corriendo sin que se detenga y los datos que no estan que simplemente se salte al siguiente datoa a buscar

Responder

todoexcel dice: Martes, 30 de abril del 2013 en 08:53 Haga su consulta en nuestro foro Salu2.xls

Any dice: Martes, 21 de mayo del 2013 en 15:49 Buenas tardes.

Tengo un excel .xlsm con una macro que borra registros, este archivo lo lleno mediante un paquete de IS con informacin de una BD pero al momento de querer ejecutar las macro que estan en VB me marca recursos insificientes, como puedo resolver esto? El archivo tiene ms de 60 mil registros Responder

todoexcel dice: Jueves, 23 de mayo del 2013 en 19:59 Puede consultar en nuestro foro

Jos Manuel agundis dice: Viernes, 28 de junio del 2013 en 21:17 Buenas tardes colegas de Excel: Un tip para que me ha dado resultado es usar solo archivos binarios (.xlsb), en verdad hagan la prueba abran un archivo con las extensiones que sean (.xls, .xlsx, .xlm, etc.); y gurdenlo como archivo binario y chequen sus propiedades despus, se darn cuenta que bajar ms del 50%, cargar ms rpido y podrn hacer macros con esta extensin. Espero les sea de gran utilidad. Saludos desde Mxico. Responder

todoexcel dice: Sbado, 29 de junio del 2013 en 08:45 Excelente tip, lo descubrimos hace poco, gracias por compartirlo!

Ramn dice: Domingo, 30 de junio del 2013 en 06:42 ON ERROR RESUME NEXT Una solucin prctica que he encontrado para sto es la siguiente: Se comienzan comienzan todas las funciones y procedimientos con una instruccin que establece On Error Resume Next en funcin del valor de una variable globlal V_OmitirErrores que habremos establecido al abrir el libro. Esta variable puede hacerse depender tambin de si incluimos un caracter concreto en el nombre del libro, por ejemplo, si el nombre del libro contiene los caracteres VE (Versin Estable) se establece V_OmitirErrores a True, en caso contrario a False, con lo cual determinamos si se las macros tendrn o no On Error Resume Next Responder

Ramn dice: Martes, 2 de julio del 2013 en 16:05 Tenis en algn sito informacin sobre cmo evitar los bucles For Each Next, o podis explicarlo ms detalladamente? Gracias. Un saludo. Responder

todoexcel dice: Martes, 2 de julio del 2013 en 17:51 Usualmente se pueden evitar ordenando y aplicando acciones sobre todo un bloque de datos a la vez. Igualmente cada caso requiere su anlisis y su forma de abordarlo Si tienes un caso puntual puedes plantearlo en nuestro foro

Hernn dice: Lunes, 5 de agosto del 2013 en 18:30 Muy buenas recomendaciones, las pondr en prctica. Felicitaciones genial Post Responder

Melvin Zepeda dice:

Jueves, 22 de agosto del 2013 en 23:40 Desde aqu comienza mi error, no hace lo que necesito, es esta parte que debera encontrarme el complemento de lo que ya encontr.. Responder

todoexcel dice: Viernes, 23 de agosto del 2013 en 08:20 Por favor, las consultas solo desde nuestros foros

Vous aimerez peut-être aussi