Saltar al contenido

Trucos para optimizar la ejecución de macros


digitalboy

Recommended Posts

publicado

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:

Rows("1:1").Select
Selection.Font.Bold = True[/CODE]

Código optimizado:

[CODE]Rows("1:1").Font.Bold = True[/CODE]

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:

[CODE]While ActiveCell <> “”
‘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:

[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.

[CODE]ultima_fila = Range(“A65536″).End(xlUp).Row
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!

publicado

Hola digitalboy

20 leídas hasta el momento y ni un agradecimiento. ¿Será que son trucos conocidos por todoooooos? ¿o todos son expertos programadoreeees?. A saber.

En fin. Muchas gracias compañero a mí me parecen muy útiles. Tú sigue aportando cosas que algunos sí te lo agradeceremos.

Un saludo desde Vitoria

publicado

20 leídas hasta el momento y ni un agradecimiento. ¿Será que son trucos conocidos por todoooooos? ¿o todos son expertos programadoreeees?. A saber.

En fin. Muchas gracias compañero a mí me parecen muy útiles. Tú sigue aportando cosas que algunos sí te lo agradeceremos.

Jajaja! pues no lo se! pero yo en mis inicios... hubiese deseado saber como detectar la ultima fila de un rango de datos me las ingenie haciendo while para ir parseando las celdas y rompí el coco tratando de hacer una macro para procesar unas notas de credito!

Recuerdo que hasta me quede hasta tarde en el trabajo por tratar de sacarlo!

Saludos desde México!

publicado

JAJAJA, muy interezantes los trucos varios que no conocia, pero faltan los de:

1. Application.ScreenUpdating = False

2. Application.DisplayAlerts = False

3. Application.Calculate

y algunos otros mas que no me recuerdo.

Gracias por el aporte, poniendo en practica.

Salu2.xlsx

Invitado jluis
publicado

Digitalboy te agradeceria que futuros aportes se hagan según las Normas del Foro

[*]2.24 En caso de realizar un aporte al Foro de una Web externa o amiga habrá que colocar una buena parte de la información (75%) en el cuerpo del mensaje' date=' citando el autor y la fuente, al final del mensaje se deberá dejar un enlace directo al artículo completo o archivo.

[/list']

Se agradecerá que también modificases este según lo solicitado.

publicado
Digitalboy te agradeceria que futuros aportes se hagan según las Normas del Foro

Se agradecerá que también modificases este según lo solicitado.

Ya hice las modificaciones solicitadas de acuerdo a las reglas. Ups lo cual denota que no las había leído al 100%. Me tomare mi tiempo para leerlas nuevamente.

75% del articulo? creo que es mas fácil y practico mencionar el link por que evita la duplicidad de información. Pero si esas son las reglas del foro me apegare a ellas.

- - - - - Mensaje combinado - - - - -

Ahora si! ya me lei al 100% las normas! Ups ahora resulta que me he infringido tres normas! Charros!

Son estas:

2.13 Una vez reviví un tema antiguo

2.14 Que he cometido varias veces en la sección de ideas y aportes

2.10 En la cual he subido archivos protegidos por contraseña

me surge una duda con respecto a la 2.10, la cual es la siguiente:

"Si yo desarrollo un complemento de propósito general que pudiera ser sumamente practico o en su defecto proporcionar a los usuarios del foro un complemento que haya encontrado en internet y estos están protegidos por contraseña, la norma dice que no esta permitido subirlos ni con el cargador ni con el servicio de terceros. Esto incluye cualquier enlace para la descarga de estos complementos? si es así... acaso no se esta privando a los participantes del foro el usar herramientas que pudieran serles útiles en su trabajo diario?"

Agradecería pudieran despejar mi duda con respecto a mi pregunta sobre la norma 2.10

Saludos.

Invitado jluis
publicado

Gracias por la corrección, con el resto es necesario abrir un tema en el Foro Sugerencias y Reclamaciones.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.