Faq/Calc/125/ru

Как осуществить расчет накопленным итогом с использованием итераций
Ситуация: Вы хотите добавить к сумме последовательные значения результатов расчетов. Как действовать, зная, что при изменении "источника" значений для расчета, результат пересчитывается и не "помнит" предыдущее значение?

В следующем примере, результат расчета можно найти в C7: =C10-C13+C16

=C10-C13+C16



Вы хотели бы захватить новые значения в С10, С13 и С16 и этот результат операции добавить к предыдущему.

Несмотря на некоторые ограничения, это может быть достигнуто при помощи итераций.



Пояснения
 * Давайте начнём с возможности повторной инициализации накопленного итога. Мы добиваемся этого с помощью значения содержащегося в ячейке "тест" (C5). Для примера, если C5 содержит 0 (ноль), накопленный итог будет сброшен.


 * Далее, мы должны контролировать итерацию с помощью меню . Определение его в 1 приводит к двум расчетам. Но мы не хотим дважды добавлять C7 в накопленный итог. Решение простое: нужно разделить результат накопленного итога на число 2 (см. выше в E7).


 * Минимальное изменение косвенно определяет, какое максимальное значение учитывается. Например, со значением 10000, что угодно в С7 больше, чем 20000 вызовет ошибку 523 (расчет не сходится).


 * Давайте продолжим непосредственно с расчета накопленным итогом. Результат, который следует накапливать уже имеется в C7, но вы не можете его использовать как источник для накопления. Когда любая ячейка из источников меняет значение (эти ячейки показаны оранжевым на скриншоте), C7, для расчета накопленным итогом, необходимо обновить. Поэтому расчет повторяться в E7 вместе с проверкой для сброса значений и необходимым делением на 2:

=IF(C5=0;0;E7+((C10-C13+C16)/2))


 * Во время загрузки документа, значения пересчитываются. Но это является затруднительным в случае расчетов накопленным итогом. Поэтому, вы должны принять меры предосторожности (меню снять галочку), а затем проводить перерасчет "вручную" с помощью.

В примере лист защищён (без пароля) так, что редактировать можно только области для ввода данных (оранжевые ячейки).


 * [[Media:RU.FAQ Cacl 125 Iteration.ods|Скачать пример]]