Определение времени выполнения макроса и сравнение времени работы циклов, суммирующих значения в диапазоне, в переменной диапазона и в массиве.
Время работы макроса
Определение времени выполнения макроса с использованием функции Timer:
1 2 3 4 5 6 7 8 9 10 |
Sub VremyaRabotyMakrosa() Dim t As Single t = Timer ---------------- 'код процедуры, время выполнения 'которой необходимо определить ---------------- t = Timer - t MsgBox t End Sub |
Обратите внимание, что небольшие процедуры (макросы) выполняются очень быстро, и результат будет равен 0. В этом случае будет более целесообразно применить функцию MicroTimer, которая использует вызовы Windows API для получения значений системного таймера высокого разрешения, встроенного в большинство процессоров.
Время работы циклов
Сравнение времени работы вложенных циклов For… Next, суммирующих одинаковые значения в диапазоне, в переменной диапазона и в массиве:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Sub VremyaRabotyMakrosov() Dim myRange As Range, myArray As Variant, i1 As Long, _ i2 As Long, i3 As Long, n As Double, t As Single 'Определение времени работы вложенных циклов в диапазоне: t = Timer With Range("A1:J30") For i1 = 1 To 1000 n = 0 For i2 = 1 To 30 For i3 = 1 To 10 n = n + .Cells(i2, i3) Next Next Next End With t = Timer - t Range("A32") = "Время работы циклов в диапазоне:" Range("F32") = t 'Определение времени работы вложенных циклов в переменной диапазона: t = Timer Set myRange = Range("A1:J30") With myRange For i1 = 1 To 1000 n = 0 For i2 = 1 To 30 For i3 = 1 To 10 n = n + .Cells(i2, i3) Next Next Next End With t = Timer - t 'MsgBox t Range("A33") = "Время работы циклов в переменной диапазона:" Range("F33") = t 'Определение времени работы вложенных циклов в массиве: t = Timer myArray = Range("A1:J30") For i1 = 1 To 1000 n = 0 For i2 = 1 To 30 For i3 = 1 To 10 n = n + myArray(i2, i3) Next Next Next t = Timer - t 'MsgBox t Range("A34") = "Время работы циклов в массиве:" Range("F34") = t End Sub |
Набор значений, который использовался для суммирования, и результаты определения времени работы вложенных циклов For… Next в диапазоне, в переменной диапазона и в массиве:
Время работы циклов в диапазоне и переменной диапазона часто совпадает, но не всегда. Это зависит от загруженности процессора в каждый момент времени. А вот массивы для работы с циклами имеют по времени неоспоримое преимущество.
Доброго времени суток! Хотел бы выразить Вам большую благодарность за систематизацию и доходчивое объяснение информации по VBA. Давно искал что-то подобное, для обучения. Надеюсь получится пройти курс до конца) Ещё раз Вам спасибо и удачи во всех начинаниях!
Обсуждение закрыто.