Страницы: 1
RSS
Оптимизация функции СУММЕСЛИМН с условием ИЛИ(1;2), Расчета значений из 2-х диапазонов данных
 
Добрый день!
Имеется 2 массива: Спецификация (с разбивкой на сам товар и его комплектующие для производства товара) и Производство (производство товара за периоды). В 3-м массиве нужно посчитать количество использованных комплектующих за период. Длина каждого из массивов может достигать до 10 тысяч строк. Расчет выполнен с использованием функции СУММЕСЛИМН в 3 шага - более подробно во вложении.
Основная проблема в том, что функция СУММЕСЛИМН не умеет отрабатывать условие ИЛИ(1;2), поэтому приходится дублировать функцию СУММЕСЛИМН для условия 2 и так далее., что сказывается на скорости расчета, так как входные и выходные массивы состоят/участвуют в других расчетах (пересчет формул до 2-3 секунд 4-х ядерном процессоре 2010г., на Xeon E5-2660 расчет выполняет за 0,2 секунды, но и массивы далее будут увеличиваться в размерах). Возможно есть способ оптимизации расчёта либо применив формулу массива (что возможно не даст выигрыша в скорости), либо же используя другую логику?
 
вместо описания количества ядер и типа процессора вы бы лучше сосредоточились на описании задачи: что есть на входе, что нужно посчитать в итоге
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
зачем =OFFSET(J4;-C4+1;0)???
если нужно взять предыдущее при отсутствии значений в артикулах, то проще =IF(COUNTA(E3:F3)<2;J3;
а вот замену сумме можно записать так
=SUMPRODUCT(SUMIFS($N:$N;$K:$K;YEAR($R$1);$L:$L;MONTH($R$1);$M:$M;E3:F3)), но это не ускорит расчет.

Все в месте будет
=IF(COUNTA(E3:F3)<2;J3;SUMPRODUCT(SUMIFS($N:$N;$K:$K;YEAR($R$1);$L:$L;MONTH($R$1);$M:$M;E3:F3)))
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх