Делаю на работе отчет по большому массиву данных. Выдал на-гора несколько вариантов формул, получающих один и тот же результат. Ничего особенного, простое суммирование по нескольким параметрам, пример одной из формул:
Все формулы работают правильно, но, ввиду того, что объем данных достаточно большой, а рабочие ПК недостаточно молодые, все формулы очень сильно затормаживают файл - приходится либо отключать автопересчет, либо выносить лист с тяжелыми формулами в отдельный файл, что не очень удобно.
Внимание, вопрос: (с) как можно измерить скорость работы той или иной формулы (макрос, или внутренний функционал, - секундомером вручную не предлагать )
Факультативно: в СУММПРОИЗВ() лучше использовать ссылки на весь столбец или как в примере выше - смещать диапазон?
ИМХО, вопрос общего характера, поэтому файл не прикладываю. Всем заранее спасибо!
Доброе утро, коллеги!
Делаю на работе отчет по большому массиву данных. Выдал на-гора несколько вариантов формул, получающих один и тот же результат. Ничего особенного, простое суммирование по нескольким параметрам, пример одной из формул:
Все формулы работают правильно, но, ввиду того, что объем данных достаточно большой, а рабочие ПК недостаточно молодые, все формулы очень сильно затормаживают файл - приходится либо отключать автопересчет, либо выносить лист с тяжелыми формулами в отдельный файл, что не очень удобно.
Внимание, вопрос: (с) как можно измерить скорость работы той или иной формулы (макрос, или внутренний функционал, - секундомером вручную не предлагать )
Факультативно: в СУММПРОИЗВ() лучше использовать ссылки на весь столбец или как в примере выше - смещать диапазон?
ИМХО, вопрос общего характера, поэтому файл не прикладываю. Всем заранее спасибо! Russel
Nic70y, спасибо за макрос! СУММПРОИЗВ() тоже летучая, разве нет? Субъективно, по ощущениям, внутри СУММПРОИЗВ() конструкция типа (СМЕЩ('ОПР'!$A$1;ПОИСКПОЗ(КОНМЕСЯЦА($R$2;-1)+1;'ОПР'!$X:$X;0)-1;;1600)<=$R$2) работает быстрее, чем ('ОПР'!$X:$X<=$R$2)
Nic70y, спасибо за макрос! СУММПРОИЗВ() тоже летучая, разве нет? Субъективно, по ощущениям, внутри СУММПРОИЗВ() конструкция типа (СМЕЩ('ОПР'!$A$1;ПОИСКПОЗ(КОНМЕСЯЦА($R$2;-1)+1;'ОПР'!$X:$X;0)-1;;1600)<=$R$2) работает быстрее, чем ('ОПР'!$X:$X<=$R$2)Russel
нет. летучие, это те которые пересчитываются при любых изменениях на листе, даже если просто открыть файл и ни чего не делать (а в файле будут летучие формулы) они пересчитаются и при закрытии файла будет запрос о сохранении изменений.
нет. летучие, это те которые пересчитываются при любых изменениях на листе, даже если просто открыть файл и ни чего не делать (а в файле будут летучие формулы) они пересчитаются и при закрытии файла будет запрос о сохранении изменений.Nic70y
_Boroda_, я думал над этим и даже поначалу собирался, но передумал - маленькая часть таблицы нормально работает. Так как необходимо суммирование данных по 4 критериям (диапазон дат, объект, продукт) из таблицы более 40 000 строк и 20 столбцов, шустрее будет только макрос, что неприемлемо, к сожалению. В идеале использовать бы сводную, но утвержденная форма отчета все портит, плюс данные собираются из нескольких разноформатных таблиц.
_Boroda_, я думал над этим и даже поначалу собирался, но передумал - маленькая часть таблицы нормально работает. Так как необходимо суммирование данных по 4 критериям (диапазон дат, объект, продукт) из таблицы более 40 000 строк и 20 столбцов, шустрее будет только макрос, что неприемлемо, к сожалению. В идеале использовать бы сводную, но утвержденная форма отчета все портит, плюс данные собираются из нескольких разноформатных таблиц.Russel
Так как необходимо суммирование данных по 4 критериям ... шустрее будет только макрос
А вот в этом я очень не уверен. Вот прям очень-очень. Макрос, конечно, будет шустрее, но и написать формулу, работающую быстрее СУММПРОИЗВ с кучей СМЕЩей, я думаю, вполне реально.
Так как необходимо суммирование данных по 4 критериям ... шустрее будет только макрос
А вот в этом я очень не уверен. Вот прям очень-очень. Макрос, конечно, будет шустрее, но и написать формулу, работающую быстрее СУММПРОИЗВ с кучей СМЕЩей, я думаю, вполне реально.
Прогнал макрос на тестовом файле (прилагается) с разным объемом информации. Результаты: 1. 100 строк - суммпроизв(смещ()) медленнее чем суммеслимн() в 6 раз 0,1875 и 0,03125 сек соответственно; 2. 2000 строк - в 3,5 раза - 0,265625 и 0,078125 сек соответственно; 3. 40000 строк - в 1,12 раза - 5,015625 и 4,453125 сек соответственно.
Прогнал макрос на тестовом файле (прилагается) с разным объемом информации. Результаты: 1. 100 строк - суммпроизв(смещ()) медленнее чем суммеслимн() в 6 раз 0,1875 и 0,03125 сек соответственно; 2. 2000 строк - в 3,5 раза - 0,265625 и 0,078125 сек соответственно; 3. 40000 строк - в 1,12 раза - 5,015625 и 4,453125 сек соответственно.Russel