Сукупна сума без сценарію


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 на одному з аркушів, яке може (і, мабуть, повинно) використовуватися для особливих випадків, таких як один в цьому питанні.


Я взяв цю формулу один раз (я думаю, це була ваша) на форумі Google: SUMIF (ROW (A: A); "<" & ROW (A: A)), це не спрацювало. Цей робить.
Яків Ян Туінстра

Зображення у відповіді відредагував інший учасник: + Xavier Casto
AdamL

1
@Fogest, я використовував продукт під назвою "Snagit", щоб дізнатися більше на techsmith.com/download/snagit
Xavier Casto

@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" вище.


7
Це, здається, працює і набагато простіше, ніж прийнята відповідь
К Рафаель

1
погоджено, це простіше, і це працює безшовно!
loretoparisi

1

Хоча прийнята відповідь на місці, вона має головний недолік через те, що останній параметр SUMIFповинен бути завжди "допустимим діапазоном", тому коли мова заходить про якийсь більш просунутий обчислювальний загальний обчислення, MMULTце кращий варіант:

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

0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.