A continuación menciono cinco grandes trucos para optimizar el código generado por el grabador de macros, así mismo pueden ser aplicados cuando se programa o se personaliza una macro de forma manual. Con estos trucos se consigue una disminución en el tiempo de ejecución de la misma.
Personalmente me desespera el ver una macro en ejecución que tarda demasiado tiempo… seleccionando celda por celda para llevar acabo un proceso o cosas por el estilo. Tuve la oportunidad de ver la ejecución de una macro que tardaba 2 días para generar reportes de métricas mensuales. Mi jefe presumía del talento de la chica que genero tal macro para obtener dichos reportes… No dude de los conocimientos de la chica en estadística, pero en cuento a su estilo de programación… dejaba mucho que desear, después de todo ella no era programadora!
Si bien el contar con un equipo con grandes prestaciones acelera la ejecución del código lo que realmente impacta en el desempeño de la ejecución del mismo es el utilizar buenas técnicas de programación, algoritmos eficientes y reducir al mínimo la cantidad de lineas de código.
Estos son los trucos:
Evitar la selección
En Excel es necesario seleccionar primero las cosas antes de actuar sobre ellas. Por ejemplo, se selecciona la fila uno y se le aplica un formato en negrita. Sin embargo, en VBA raramente se tiene que seleccionar algo para hacer esto.
Al optimizar el código se obtienen dos ventajas. Disminución de líneas de código, ejecución más rápida del mismo.
Comenzar el rango desde abajo para encontrar la última fila
Cuando se tengan que procesar datos fila por fila de hoja y no se sepa de antemano el numero de filas a procesar, no es muy recomendable utilizar lo siguiente en el código:
Suponiendo que la celda activa (ActiveCell) es A1, el código anterior va procesando celda por celda hasta encontrar una en blanco pero que tal si hay celdas en blanco entre datos? habría filas de datos que no se procesen. Lo mejor es empezar desde abajo:
[CODE]fila = Range(“A65536″).End(xlUp).Row
for i = 1 to fila
‘procesa datos…
next i[/CODE]
Con el método anterior realmente sabremos con seguridad el numero de filas a procesar, lo mejor es utilizar una columna en la que estemos 100% seguros que nunca habrá celdas en blanco. El código anterior esta pensado para las 65536 filas de Excel 2003 , pero Excel 2007 dispone de mas de un millón. Una alternativa que funcione en ambas versiones podría ser:
[CODE]fila = Cells(Rows.Count, 1).End(xlUp).Row
for i = 1 to fila
‘procesa datos…
next i[/CODE]
Utilizar variables
El grabador de macro no crea ni emplea variables, las cuales son muy sencillas de utilizar.
El código anterior averigua la ultima fila, pone al final de la columna A la palabra “Total: ” y al final de la columna B la suma de los datos de misma.
A continuación menciono cinco grandes trucos para optimizar el código generado por el grabador de macros, así mismo pueden ser aplicados cuando se programa o se personaliza una macro de forma manual. Con estos trucos se consigue una disminución en el tiempo de ejecución de la misma.
Personalmente me desespera el ver una macro en ejecución que tarda demasiado tiempo… seleccionando celda por celda para llevar acabo un proceso o cosas por el estilo. Tuve la oportunidad de ver la ejecución de una macro que tardaba 2 días para generar reportes de métricas mensuales. Mi jefe presumía del talento de la chica que genero tal macro para obtener dichos reportes… No dude de los conocimientos de la chica en estadística, pero en cuento a su estilo de programación… dejaba mucho que desear, después de todo ella no era programadora!
Si bien el contar con un equipo con grandes prestaciones acelera la ejecución del código lo que realmente impacta en el desempeño de la ejecución del mismo es el utilizar buenas técnicas de programación, algoritmos eficientes y reducir al mínimo la cantidad de lineas de código.
Estos son los trucos:
Evitar la selección
En Excel es necesario seleccionar primero las cosas antes de actuar sobre ellas. Por ejemplo, se selecciona la fila uno y se le aplica un formato en negrita. Sin embargo, en VBA raramente se tiene que seleccionar algo para hacer esto.
Código generado por el grabador:
Código optimizado:
Al optimizar el código se obtienen dos ventajas. Disminución de líneas de código, ejecución más rápida del mismo.
Comenzar el rango desde abajo para encontrar la última fila
Cuando se tengan que procesar datos fila por fila de hoja y no se sepa de antemano el numero de filas a procesar, no es muy recomendable utilizar lo siguiente en el código:
‘procesa datos…
Wend[/CODE]
Suponiendo que la celda activa (ActiveCell) es A1, el código anterior va procesando celda por celda hasta encontrar una en blanco pero que tal si hay celdas en blanco entre datos? habría filas de datos que no se procesen. Lo mejor es empezar desde abajo:
for i = 1 to fila
‘procesa datos…
next i[/CODE]
Con el método anterior realmente sabremos con seguridad el numero de filas a procesar, lo mejor es utilizar una columna en la que estemos 100% seguros que nunca habrá celdas en blanco. El código anterior esta pensado para las 65536 filas de Excel 2003 , pero Excel 2007 dispone de mas de un millón. Una alternativa que funcione en ambas versiones podría ser:
for i = 1 to fila
‘procesa datos…
next i[/CODE]
Utilizar variables
El grabador de macro no crea ni emplea variables, las cuales son muy sencillas de utilizar.
Range(“A” & ultima_fila+1) = “Total: “
Range(“B” & ultima_fila+1).Formula = “=SUM(B2:B” & ultima_fila & ” )”[/CODE]
El código anterior averigua la ultima fila, pone al final de la columna A la palabra “Total: ” y al final de la columna B la suma de los datos de misma.
____________________________________________________________________________________________________________
Autor: Bill Jellen (Mr Excel)
Fuente: Mexcel Plus
Para leer el articulo completo:
Trucos de Optimizacion
Espero les sea de utilidad a quienes van iniciando en el mundo de la programación!