Бывает, в таблицах требуется вывести нарастающий итог по какому-то столбцу значений. Понятное дело, что можно в каждую ячейку вставить формулу, считающую значение в каждой конкретной ячейке - но это не наш путь. Лично мне больше нравится когда на всю колонку указана одна формула, которая и считает значения во всех требуемых ячейках. Это и количество возможных ошибок со стороны пользователей уменьшает, и формулу проверить-скорректировать при необходимости сильно проще.

Я по шагам расскажу как это работает. Кто хочет сразу готовую формулу - можно прокрутить вниз.

Рассмотрим пример:

Есть некая колонка Результат и нам необходимо, чтоб в колонку Накопительный итог суммировались результаты начиная с самого первого, как это посчитано на картинке.

Решить эту задачу можно несколькими способами, как писал изначально, но мы здесь будем рассматривать вариант как это посчитать всего одной формулой.

Накопительный итог можно посчитать используя формулу SUM, где в качестве параметра передать массив ячеек, который требуется посчитать в каждой конкретной ячейке. А требуемый массив для каждой ячейки можно получить следующим образом:

=arrayformula("A2:A"&row(A2:A))

Чтоб передать вычисленный нами размер массива для каждой конкретной ячейки в функцию SUM мы используем ещё одну функцию - INDIRECT:

=sum(indirect(C2))

Или, чтоб убрать использование промежуточных ячеек, сразу так:

=sum(indirect("A2:A"&row(A2)))

И протащив это значение на требуемое количество строчек - получим посчитанное значение. Но это ещё не то, чего мы хотим. Нам надо посчитать все значения используя всего одну формулу.

Для того, чтоб достичь требуемого результата - мы будем использовать ещё одну функцию - BYROW и сделаем всё то же самое с её помощью. Для начала проверим, что получаем требуемые для вычислений массивы. В данном случае нам уже надо будет вводить всего одну фунцию всего в одну ячейку для расчёта всех требуемых значений:

=byrow(A2:A;lambda(a;"A2:A"&row(a)))

Убеждаемся, что всё корректно и переходим к следующему шагу. Добавляем вычисление суммы массива так-же всего одной формулой в одну ячейку:

=byrow(A2:A;lambda(a;sum(indirect("A2:A"&row(a)))))

Как видим - в общем и целом уже всё работает и считает. Осталось навести блеск и убрать вычисление в тех строках, где ещё не заполнено поле Результат. Для этого используем функции IF и ISBLANK. И да - это всего одна формула всего в одну ячейку B2:

=byrow(A2:A;lambda(a;if(isblank(a);;sum(indirect("A2:A"&row(a))))))

Как видим - всё замечательно работает и для вычисления Накопительного итога по всей колонке мы обошлись всего одной формулой в одной ячейке.

Таблица из примера тут.

Надеюсь, было интересно, понятно и полезно.

Комментарии (8)


  1. SlFed
    10.08.2023 06:42
    +16

    А почему нельзя просто СУММ($A$2:A3) и далее просто протянуть мышкой вниз ?


    1. aleksandy
      10.08.2023 06:42
      +3

      Потому что зачем просто, если можно сложно :)


    1. remaikee Автор
      10.08.2023 06:42

      Можно. Как и написано в самом начале статьи. Особенно если Вам так проще и таблицей пользуетесь Вы один.

      Если же таблицей пользуется ещё кто-то, кто может, к примеру, взять и просто передвинуть строчки в таблице, или решит формулу в одной конкретной ячейке подправить - то предложенный выше вариант как раз позволяет предотвратить подобные случаи.


      1. SlFed
        10.08.2023 06:42

        Так, СТОП !!!
        Как только требуется многопользовательский доступ к таблице (тем более в гугле), первым делом надо настроить кому и какие права давать, чтобы вот подобных ситуаций не было.

        Необходимо разграничить тех кто может вносить данные и тех кто может изменять структуру таблицы, иначе никакие игры с формулами ничем не помогут.

        Далее - при вставке строки гугл таблицы (как и эксель) корректируют ссылки в таблице, передвигая их (поэтому-то и существуют абсолютные ссылки с $). Так что добавка/удаление строки не приведет к неправильным расчетам.

        И самое главное (исхожу из своего опыта): НИКОГДА НЕ РАБОТАЙТЕ С ОДНОЙ ТАБЛИЦЕЙ В МНОГОПОЛЬЗОВАТЕЛЬСКОМ ДОСТУПЕ БОЛЬШЕ ОДНОГО ГОДА !!!!!
        Примерно через полгода-год создавайте новую чистую таблицу, а старую - в архив в режим ридонли. Иначе проблемы с обработкой большого файла вам гарантированы.


  1. Nurked
    10.08.2023 06:42
    -3

    Пиздец. Причём полный. Зарегистрироваться на Хабре в 2013 году. Ни разу ничего не написать или прокомментировать. Прийти и выложить статью про формулы в Экселе. ЭКСЕЛЕ, КАРЛ!

    Иметь 0 кармы.

    Всё.

    Что это? Зачем это? Кому это?


    1. astenix
      10.08.2023 06:42
      +1

      Может у человека еще нет своего tg-канала…


  1. Alex2172
    10.08.2023 06:42

    А почему нельзя просто =A2+B1 (где B1 содержит 0) и далее просто потянуть мышкой вниз?

    В следующей ячейке автоматом будет =A3+B2 и т.д.


    1. SlFed
      10.08.2023 06:42

      А вот это уже не очень хорошее решение, потому что оно требует последовательного пересчета всех итогов строго один за другим. Ладно если в таблице не более сотни строк, а если больше 10000, то пересчет может занять минуту.