重置 运行 总计 Google 张的 ArrayFormula

ArrayFormula of Resetting Running Total in Google Sheets

我正在寻找总计 运行 的(非拖动)ArrayFormula,它会在每次 alt 列中的值更改时重置。示例:

          desired result
a    2          2
a    3          5
a    5         10
b    2          2
c    3          3
c    4          7

因此,每次第一列中的值发生变化时,总和都会重置。如果重要,table 总是排序。


非重置正则运行总公式:


我试图以某种方式将它与这个计数器公式结合起来,但到目前为止运气不好:

=ARRAYFORMULA(COUNTIFS(A1:A6, A1:A6, ROW(A1:A6), "<="&ROW(A1:A6)))

我也做了一些研究,但只发现 script 感兴趣或 dragging/MS Excel 公式解决方案如:

=SUM(INDIRECT("L"&SUMPRODUCT(MAX(($H:H4=0)*ROW($H:H4)))+1):L5)
-----------------------------------------------------------------------------------------------------------
=SUM(L:L5)-SUM(M:M4)
-----------------------------------------------------------------------------------------------------------
=SUM($C:$C2)-IFERROR(SUM($C:OFFSET($C,LOOKUP(2,1/($B:$B2="reset"),ROW($B:$B2)-ROW($B)+1),0)),0)
-----------------------------------------------------------------------------------------------------------
=MOD((ROW()-ROW(E))*1,(1+5))

如果 table 始终按 A 列排序,您可以这样做:

=ARRAYFORMULA(SUMIF(ROW(B1:B6), "<="&ROW(B1:B6), B1:B6)-SUMIF(A1:A6, "<"&A1:A6, B1:B6))

如果 table 未排序,您仍然可以使用 vlookup 进行排序:

=ARRAYFORMULA(SUMIF(ROW(B1:B6), "<="&ROW(B1:B6), B1:B6)-SUMIF(row(A1:A6), "<"&vlookup(A1:A6,{A1:A6,row(A1:A6)},2,false), B1:B6))

另外,你也可以试试

=ArrayFormula(if(len(A:A),mmult(--transpose(if( (transpose(row(A:A))>=row(A:A))*(A:A=transpose(A:A)),B:B, 0)),row(A:A)^0),))

如果数据未排序,这也应该有效。

@JPV 解决方案的修改集中在 speed:

=INDEX(MMULT(1*TRANSPOSE(IF((TRANSPOSE(ROW(
 INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))))>=ROW(
 INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))))*(
 INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>"")))=TRANSPOSE(
 INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))), 
 INDIRECT("B2:B"&MAX(ROW(A2:A)*(A2:A<>""))), 0)), ROW(
 INDIRECT("A2:A"&MAX(ROW(A2:A)*(A2:A<>""))))^0))


=INDEX(IF(B2:B="",, ROW(B2:B) - VLOOKUP(ROW(B2:B), FILTER(ROW(B2:B), B2:B<>"", B2:B<>B2:Boffset1), 1, 1) + 1)) - B=T/F.txt