Добрый день!
Часто замечал комментарии опытных пользователей о том что Select лучше не использовать, а расчеты можно произвести внутри макроса и привычными формулами не пользоваться вообще. Решил прислушаться, изменить свой расчетный файл, столкнулся с проблемой значительного увеличения затрачиваемого на расчеты времени.
например,
в ячейке P4 прописана формула =ЕСЛИОШИБКА(ОКРУГЛ(СРЗНАЧЕСЛИ($C4:$O4;">0");1);0)
макросом данная формула растягивается на весь диапазон, делается расчет, формулы переводятся в значения (на 200 тысяч строк затрачивается 1 секунда)
После замены макроса на
время выполнения расчета точно тех же данных в том же объеме возросло до 43 секунд.
неудачно подобрано решение для выполнения расчета? его следует чем либо дополнить, чтобы ускорить процесс?
Спасибо!
Часто замечал комментарии опытных пользователей о том что Select лучше не использовать, а расчеты можно произвести внутри макроса и привычными формулами не пользоваться вообще. Решил прислушаться, изменить свой расчетный файл, столкнулся с проблемой значительного увеличения затрачиваемого на расчеты времени.
например,
в ячейке P4 прописана формула =ЕСЛИОШИБКА(ОКРУГЛ(СРЗНАЧЕСЛИ($C4:$O4;">0");1);0)
макросом данная формула растягивается на весь диапазон, делается расчет, формулы переводятся в значения (на 200 тысяч строк затрачивается 1 секунда)
Код |
---|
Sub aaa() Range("P4").AutoFill Destination:=Range("P4").Resize(Range("A4").End(xlDown).Row - Range("P4").Row + 1) 'растянуть формулу Calculate 'пересчитать Range("P5").Select 'выбрать ячейку Range(Selection, Selection.End(xlDown)).Select 'выделить вниз Selection.Copy 'копировать Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставить только значения End Sub |
После замены макроса на
Код |
---|
Sub AA() On Error Resume Next 'в случае ошибки продолжить PosStr = Sheets("Доп").UsedRange.Rows.Count 'переменная - количество строк For n = 5 To PosStr 'с какой по какую строку Sheets("Доп").Range("P" & n) = Round(Application.AverageIfs(Sheets("Доп").Range("C" & n & ":O" & n), Sheets("Доп").Range("C" & n & ":O" & n), ">0"), 1) Next End Sub |
неудачно подобрано решение для выполнения расчета? его следует чем либо дополнить, чтобы ускорить процесс?
Спасибо!