Cómo optimizar tus macros de Excel para que corran más rápido

La utilización de macros es muy común para automatizar procesos repetitivos o que requieren conocimientos especializados. Sin importar el motivo por el cual utilices macros, seguro deseas que se ejecuten lo más rápido posible. Puedes optimizar tu código siguiendo estos consejos:

Índice de Contenido
  1. 1. Desactiva las características que actualizan la hoja
  2. 2. Evita seleccionar cosas innecesariamente
  3. La velocidad es mejor
    1. Envíame tus preguntas sobre Office
  4. También puedes leer...

1. Desactiva las características que actualizan la hoja

¿Alguna vez has notado que la pantalla parpadea mientras se ejecuta una macro? Esto ocurre cuando Excel intenta redibujar la pantalla para mostrar los cambios realizados por la macro en ejecución. Si las actualizaciones de pantalla no son necesarias mientras se ejecuta la macro, considera desactivar esta función para que tu macro se ejecute un poco más rápido. Utiliza estas instrucciones para desactivar y habilitar esta función:

Application.ScreenUpdating = False
'macro code
Application.ScreenUpdating = True

Espera que Excel redibuje la pantalla cuando la macro haya completado su trabajo, restableciendo la propiedad a True.

Al desactivar las actualizaciones de pantalla, no se desactivará la Barra de estado, que muestra información durante las operaciones normales, incluyendo lo que está haciendo tu macro. Para desactivar las actualizaciones en la Barra de estado, utiliza la propiedad DisplayStatusBar de la siguiente manera:

Application.ScreenUpdating = False
Application.DisplayStatusBar = False
'macro code
Application.DisplayStatusBar = True
Application.ScreenUpdating = True

Microsoft revoluciona las transacciones automatizadas con blockchain y el Coco Framework

Si tu macro está analizando una gran cantidad de datos, considera establecer la propiedad de cálculo en Manual mientras la macro se ejecuta. De esta forma, el libro de trabajo no se calculará de nuevo a menos que lo fuerces presionando F9. La velocidad de cálculo probablemente no sea un factor importante en el rendimiento de la mayoría de los libros de trabajo normales, pero puede tener resultados inesperados, así que úsalo con moderación, según sea necesario:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
'macro code
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Las macros pueden activar procedimientos de eventos innecesarios. Por ejemplo, ingresar un valor en una celda activa el evento Worksheet_Change. Puede que algunos no sean perceptibles, pero si la macro es lo suficientemente compleja, considera desactivar los eventos mientras se ejecuta la macro:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
'macro code
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Al igual que al establecer la propiedad de cálculo en Manual, la desactivación de eventos puede tener resultados inesperados, así que úsalo con cuidado.

2. Evita seleccionar cosas innecesariamente

Si utilizas el grabador de macros, probablemente hayas notado que utiliza el método Select para hacer referencia a elementos explícitamente. Si bien esto funciona, es lento y propenso a errores en tiempo de ejecución. Si quieres comenzar con el grabador, hazlo. Luego, revisa el código resultante en busca de métodos Select y cámbialos a referencias de Rango. Por ejemplo, el siguiente código del grabador aplica el formato de cursiva a la celda C4:C62:

Cómo desactivar la creación de archivos .DS_Store en Mac

Sub Macro1()
Range("C4:C62").Select
Selection.Font.Italic = True
End Sub

El grabador utiliza el método Select para identificar el rango. Una vez que conoces los métodos y propiedades correctos, como por ejemplo Font.Italic = True, puedes reescribir la macro de la siguiente manera:

Sub Macro2()
Range("C4:C62").Font.Italic = True
' Sheets("Divisions").Range("C4:C62").Font.Italic = True
' Range("Table3[Species]").Font.Italic = True
End Sub

Macro2() logra el mismo resultado con una línea de código y sin seleccionar el rango. En resumen, simplemente combinas las dos declaraciones, eliminando el método Select y el objeto Selection. El código optimizado es más eficiente y menos propenso a errores en tiempo de ejecución.

Las líneas comentadas muestran las referencias a la hoja de cálculo y a la tabla. La referencia de hoja de cálculo solo es necesaria si deseas ejecutar la macro fuera de la hoja de cálculo (como en el caso de la hoja "Divisions" en este ejemplo). La referencia a la tabla hace referencia a la columna Species en una tabla con el nombre Table3.

Para obtener más información sobre métodos de selección eficientes al usar VBA, lee Consejos de Excel: cómo seleccionar celdas y rangos eficientemente utilizando VBA.

Cómo resaltar las filas de subtotal en Excel con formato condicional

De manera similar a la selección de rangos y objetos para realizar una acción en la hoja de cálculo, una referencia explícita a la hoja de cálculo también ralentiza el procesamiento. La solución es utilizar variables. Por ejemplo, el siguiente código hace referencia a la misma celda (valor) seis veces:

Function ReturnFeeSlow()
Select Case Range("I4")
Case 1
ReturnFee = Range("I4") * 10
Case 2
ReturnFee = Range("I4") * 20
Case 3
ReturnFee = Range("I4") * 30
Case 4
ReturnFee = Range("I4") * 40
Case 5
ReturnFee = Range("I4") * 50
End Select
MsgBox ReturnFee, vbOKOnly
End Function

En el caso de ReturnFeeSlow(), se realizan al menos dos referencias explícitas a I4. No se está cambiando el valor, simplemente se utiliza en una expresión simple. En este caso, es más eficiente definir una variable con el valor de I4 y utilizar esa variable, como se muestra a continuación:

Function ReturnFeeFast()
Dim intFee As Integer
intFee = Range("I4").Value
Select Case intFee
Case 1
ReturnFee = intFee * 10
Case 2
ReturnFee = intFee * 20
Case 3
ReturnFee = intFee * 30
Case 4
ReturnFee = intFee * 40
Case 5
ReturnFee = intFee * 50
End Select
MsgBox ReturnFee, vbOKOnly
End Function

La velocidad es mejor

Por favor, perdona los ejemplos un tanto exagerados, pero lo importante es el concepto, no el propósito del código. Específicamente, las características de actualización incorporadas y las referencias explícitas a la hoja de cálculo o a un rango ralentizarán tu código. Es cierto que con los sistemas rápidos de hoy en día, las macros simples no siempre necesitarán optimización. Sin embargo, si estás trabajando con una aplicación personalizada compleja, estos cambios fáciles de implementar deberían mejorar la eficiencia.

Envíame tus preguntas sobre Office

Responderé las preguntas de los lectores cuando pueda, pero no puedo garantizarlo. No envíes archivos a menos que se te solicite; las solicitudes iniciales de ayuda que lleguen con archivos adjuntos serán eliminadas sin leer. Puedes enviar capturas de pantalla de tus datos para ayudar a aclarar tu pregunta. Al contactarme, sé lo más específico posible. Por ejemplo, "Por favor, soluciona mi libro de trabajo y corrige lo que está mal" probablemente no obtendrá una respuesta, pero "¿Puedes decirme por qué esta fórmula no está devolviendo los resultados esperados?" sí podría. Por favor, menciona la aplicación y la versión que estás utilizando. No se me reembolsa por parte de Newsmatic por mi tiempo o conocimientos al ayudar a los lectores, ni les pido una tarifa a los lectores a los que ayudo. Puedes contactarme en [email protected].

7 formas de acceder al Modo Seguro en Windows 10

También puedes leer...

  • Errores de Excel: cómo la hoja de cálculo de Microsoft podría ser peligrosa para tu salud (ZDNet)
  • 10 consejos para acelerar tu trabajo en Outlook y ahorrar tiempo (Newsmatic)
  • Preguntas y respuestas sobre Office: recupera opciones antiguas y encuentra rápidamente mensajes relacionados (Newsmatic)
  • Cómo utilizar la función de zoom de PowerPoint 2016 para agregar flexibilidad a tus presentaciones (Newsmatic)

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a Cómo optimizar tus macros de Excel para que corran más rápido , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.