ผลรวมสะสมโดยไม่มีสคริปต์


35

สำหรับคำถามนี้ฉันได้สร้างฟังก์ชัน Google Apps Script ซึ่งคำนวณผลรวมสะสมของช่วง Martin Hawkseyบน 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)) ที่ไม่ทำงาน อันนี้ทำ
Jacob Jan Tuinstra

รูปภาพในคำตอบถูกแก้ไขโดยสมาชิกคนอื่น: + Xavier Casto
AdamL

1
@Fogest ฉันใช้ผลิตภัณฑ์ชื่อ "Snagit" ค้นหาข้อมูลเพิ่มเติมได้ที่techsmith.com/download/snagit
Xavier Casto

@XavierCasto โอ้ฉันเคยใช้มานานแล้วจำไม่ได้ว่ามีสิ่งนี้ถึงแม้ว่ามันจะนานมากแล้ว ขอบคุณสำหรับการตอบกลับฉันชอบผลิตภัณฑ์โดยช่างเทคนิค
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
ดูเหมือนว่าจะใช้งานได้และง่ายกว่าคำตอบที่ยอมรับ
K Raphael

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.