重置 运行 总计 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(SUMIF(ROW(B1:B6), "<="&ROW(B1:B6), B1:B6))
=ARRAYFORMULA(MMULT(TRANSPOSE((ROW(B1:B6)<=TRANSPOSE(ROW(B1:B6)))*B1:B6), SIGN(B1:B6)))
我试图以某种方式将它与这个计数器公式结合起来,但到目前为止运气不好:
=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
我正在寻找总计 运行 的(非拖动)ArrayFormula,它会在每次 alt 列中的值更改时重置。示例:
desired result
a 2 2
a 3 5
a 5 10
b 2 2
c 3 3
c 4 7
因此,每次第一列中的值发生变化时,总和都会重置。如果重要,table 总是排序。
非重置正则运行总公式:
=ARRAYFORMULA(SUMIF(ROW(B1:B6), "<="&ROW(B1:B6), B1:B6))
=ARRAYFORMULA(MMULT(TRANSPOSE((ROW(B1:B6)<=TRANSPOSE(ROW(B1:B6)))*B1:B6), SIGN(B1:B6)))
我试图以某种方式将它与这个计数器公式结合起来,但到目前为止运气不好:
=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