Влияет ли на скорость выполнения макроса количество строк кода? Т.е. если, например, написать некоторый код с использованием циклов For - Next с содержанием некоторых условий If, или написать те же действия без циклов, по строкам.
Влияет ли на скорость выполнения макроса количество строк кода? Т.е. если, например, написать некоторый код с использованием циклов For - Next с содержанием некоторых условий If, или написать те же действия без циклов, по строкам.votangi59
votangi59, добрый день! Можно еще почитать что-нибуди про сложность алгоритмов, нотацию О-большое: -Грокаем алгоритмы, или -эту книгу Там совсем немного математики и достаточно доходчиво все описано с картинками и схемами.
votangi59, добрый день! Можно еще почитать что-нибуди про сложность алгоритмов, нотацию О-большое: -Грокаем алгоритмы, или -эту книгу Там совсем немного математики и достаточно доходчиво все описано с картинками и схемами.jun
, то значит число строк относительно невелико и разницу в скорости выполнения процедуры циклом или прямым перебором никто не заметит. А если речь идёт об обработке тысяч строк, то вряд ли кто-то за обозримый промежуток времени сможет написать процедуру прямого перебора. Да и циклы бывают реализованы по-разному. Например, цикл с обращением к диапазонам ячеек листа выполняется дольше, чем цикл по значениям этих ячеек, предварительно скинутым в массив. Или, например, можно на время выполнения цикла запретить приложению отвлекаться на обновление экрана, обработку событий, оповещение об ошибках, автоматический пересчёт значений в ячейках, то выполняться цикл будет быстрее.
Я, например, использую Punto Switcher, в правилах которого прописано заменять при вводе App-False на [vba]
Код
With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With
[/vba]Аналогично и введённое App-True заменяется на [vba]
Код
With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With
, то значит число строк относительно невелико и разницу в скорости выполнения процедуры циклом или прямым перебором никто не заметит. А если речь идёт об обработке тысяч строк, то вряд ли кто-то за обозримый промежуток времени сможет написать процедуру прямого перебора. Да и циклы бывают реализованы по-разному. Например, цикл с обращением к диапазонам ячеек листа выполняется дольше, чем цикл по значениям этих ячеек, предварительно скинутым в массив. Или, например, можно на время выполнения цикла запретить приложению отвлекаться на обновление экрана, обработку событий, оповещение об ошибках, автоматический пересчёт значений в ячейках, то выполняться цикл будет быстрее.
Я, например, использую Punto Switcher, в правилах которого прописано заменять при вводе App-False на [vba]
Код
With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With
[/vba]Аналогично и введённое App-True заменяется на [vba]
Код
With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: .Calculation = xlAutomatic: End With