Hola a todos!
En muchas ocasiones, cuando programamos rutinas en VBA, solemos preguntarnos acerca de la duración de nuestros procesos, si con un método de programación la ejecución es más rápida que con otro. Aunque son muchos los factores que influyen en la rapidez y eficiencia de nuestro código (tipo de datos, procesador, memoria, etc …), podemos obtener el tiempo de duración de un proceso entre que se inicia y finaliza.
Para documentar este método utilizaré un ejemplo sencillo, mediante una instrucción For-Next con matrices veremos el tiempo que tarda en ejecutarse el proceso. Imaginad estos datos:
Nuestro objetivo es pasar una rutina que agrupe las edades en varios tramos. Para ello, utilizaremos el siguiente código:
Option Explicit
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub TIEMPO_EJECUCION_MACRO()
'Declaramos variables
Dim miarray As Variant, i As Long, n As Long
Dim fin As Long
'Pasamos el resultado de la función GetTickCount a una variable
'Capturamos momento inicial
n = GetTickCount
With Sheets("DATOS")
fin = Application.CountA(Range("A:A"))
'Pasamos rango a matriz
miarray = Range("E2:E" & fin).Value
'Iniciamos el for
For i = UBound(miarray, 1) To LBound(miarray, 1) Step -1
Select Case miarray(i, 1)
'Select case para agrupar edades
Case 1 To 34
Range("F" & i + 1) = "Menor o igual a 34"
Case 35 To 54
Range("F" & i + 1) = "Entre 35 y 54"
Case 55 To 94
Range("F" & i + 1) = "Entre 55 y 94"
Case Else
Range("F" & i + 1) = "Mayor de 95"
End Select
Next
End With
'Mostramos el resultado expresado en milisegundos a segundos (multiplicando el resultado por 0.001)
'Diferencia entre el inicio y final de la macro GetTickCount - n
MsgBox ("LA MACRO HA DURADO: " & (GetTickCount - n) * 0.001 & " SEGUNDOS")
End Sub
Cómo podéis observar la estructura del for es la habitual aunque he introducido el uso de matrices en la estructura. Pues bien, para obtener el tiempo vamos a utilizar una función (se puede hacer de varias formas, pero esta es la que considero más eficaz y fiable). Lo haremos llamando a una función del sistema GetTickCount
en el módulo de sistema kernel32.dll.
Una vez declarada, y antes de que se inicie nuestra macro, utilizaremos una variable para obtener el momento inicial, esto es «n» en nuestro código (como podéis observar está justo después de la declaración de variables).
Para finalizar, y a modo de msgbox, calculamos el resultado en milisegundos, es decir: GetTickCount - n
(para pasarlo a segundos debemos multiplicar por 0.001).
Es importante incluir ambas líneas de código al inicio y al final del código, para que así muestre correctamente
El resultado, después de ejecutar la macro en mi equipo es el siguiente:
La ejecución del proceso ha durado: 1,281 segundos. Este resultado también lo podéis expresar en otras unidades de tiempo, solo tenéis que aplicar las conversiones al resultado obtenido inicialmente.
Y esto es todo!. Como siempre os dejo el archivo de ejemplo para que lo probéis en vuestros equipos y proyectos.
Descarga el archivo de ejemplo pulsando en: OBTENER EL TIEMPO DE DURACIÓN DE UNA MACRO
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies