Frequently asked questions - Calc

    From The Document Foundation Wiki
    < Faq‎ | Calc
    This page is a translated version of the page Faq/Calc/125 and the translation is 88% complete.
    Outdated translations are marked like this.
    Other languages:

    Как осуществить расчет накопленным итогом с использованием итераций

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

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

    =C10-C13+C16
    
     =C10-C13+C16
    
    Скриншот - расчет с накоплением
    Начальная ситуация

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

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

    Скриншот реализации
    Реализация накоплений


    Пояснения

    • Давайте начнём с возможности повторной инициализации накопленного итога. Мы добиваемся этого с помощью значения содержащегося в ячейке "тест" (C5). Для примера, если C5 содержит 0 (ноль), накопленный итог будет сброшен.
    • Далее, мы должны контролировать итерацию с помощью меню Сервис ▸ Параметры... ▸ LibreOffice Calc ▸ Вычисления. Определение его в 1 приводит к двум расчетам. Но мы не хотим дважды добавлять C7 в накопленный итог. Решение простое: нужно разделить результат накопленного итога на число 2 (см. выше в E7).
    • Минимальное изменение косвенно определяет, какое максимальное значение учитывается. Например, со значением 10000, что угодно в С7 больше, чем 20000 вызовет ошибку 523 (расчет не сходится).
    • Давайте продолжим непосредственно с расчета накопленным итогом. Результат, который следует накапливать уже имеется в C7, но вы не можете его использовать как источник для накопления. Когда любая ячейка из источников меняет значение (эти ячейки показаны оранжевым на скриншоте), C7, для расчета накопленным итогом, необходимо обновить. Поэтому расчет повторяться в E7 вместе с проверкой для сброса значений и необходимым делением на 2:
    =IF(C5=0;0;E7+((C10-C13+C16)/2))
    
    • Во время загрузки документа, значения пересчитываются. Но это является затруднительным в случае расчетов накопленным итогом. Поэтому, вы должны принять меры предосторожности (меню Сервис ▸ Содержимое ячейки ▸ Вычислять автоматически снять галочку), а затем проводить перерасчет "вручную" с помощью Ctrl + ⇧ Shift + F9.

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