Накопительная сумма без сценария

35

Для этого вопроса я создал функцию скрипта Google Apps, которая вычисляет совокупную сумму диапазона. Мартин Хокси в Google+ сделал комментарий о более эффективном способе расчета накопленной суммы:

function cumulativeSum(array){
  var output = [];
  for (i in array){
    if(i==0) {
      if (array[i].length > 1) throw ("Only single column of data");
      output.push([array[i][0]]);
    } else {
      output.push([output[i-1][0] + array[i][0]]);
    }
  }
  return output;
}

Мой вопрос: это можно сделать с помощью формул?

Джейкоб Ян Туинстра
источник
Извиняюсь за очень поздний ответ, я только видел, что он нить в "Связанные" справа.
AdamL

Ответы:

30

Да:

=ArrayFormula(SUMIF(ROW(A1:A10);"<="&ROW(A1:A10);A1:A10))

Пример накопленной суммы

Числа в зеленом круге являются суммируемыми, ArrayFormula заполняет все остальные на основе ячейки, в которую была вставлена, в этом примере я вставил в A11, B1 и C1, чтобы показать его эффект.

В этой электронной таблице, которую я сделал некоторое время назад, делается попытка объяснить, как MMULT может использоваться для решения подобных проблем, а также демонстрируется решение SUMIF на одном из листов, которое можно (и, вероятно, следует) использовать в особых случаях, таких как в этом вопросе.

AdamL
источник
Я однажды использовал эту формулу (думаю, что она твоя) на форуме Google: SUMIF (ROW (A: A); "<" & ROW (A: A)), которая не сработала. Этот делает.
Джейкоб Ян Туинстра
Изображение в ответе было отредактировано другим участником: + Ксавье Касто
AdamL
1
@Fogest, я использовал продукт под названием «Snagit», чтобы узнать больше о techsmith.com/download/snagit
Ксавье Касто
@XavierCasto О, я использовал это долгое время назад, не помнил, чтобы это было, хотя это было давно. Спасибо за ответ, хотя, мне нравятся продукты от techsmith.
ComputerLocus
31

Предполагая, что вы хотите:

  Row | A | B | B's formula
  --------------------------------
   1  | 1 | 1 | =1     (or =A1)
   2  | 2 | 3 | =1+2   (or =A2+B1)
   3  | 3 | 6 | =1+2+3 (or =A3+B2)

так далее...

Затем вы можете использовать: =sum($A$1:A1)где A1начало чисел для суммирования. Вставьте эту формулу B1(или где угодно) и заполните ее, и она будет суммировать все ячейки , включая строку, в которой вы находитесь. Кроме того, вы можете использовать =Ax+Bx-1формат (x = текущая строка, данные в A, накопленная сумма в B) из раздела «Формула B» выше.

Farfromunique
источник
7
Кажется, что это работает и намного проще, чем принятый ответ
K Рафаэль
1
согласен, это проще и работает без проблем!
Лоретопариси
1

Хотя принятый ответ находится на месте, он имеет существенный недостаток из-за того, что последним параметром SUMIFвсегда должен быть «допустимый диапазон», поэтому, когда речь идет о более продвинутом расчете промежуточного итогового значения, MMULTлучшим вариантом является:

=ARRAYFORMULA(IF(LEN(A1:A), 
 MMULT(TRANSPOSE((ROW(A1:A)<=TRANSPOSE(ROW(A1:A)))*A1:A), SIGN(A1:A)^2), ))

0

Пользователь0
источник