简单现金簿中总计的数组公式

问题描述

我正在尝试创建一个简单的 arrayformula 以在现金簿中保持运行记录。很简单,但让我难住了。这是一个基本表格:

A B C
1 输入 退出 总计
2
3 10 10
4 1 9
5 7 16
6 5 21
7 4 17

因此,例如要在单元格 C3 中生成总数,我使用公式 offset(C3,-1,0)-B3+A3 但我想我可以将它包装在 arrayformula 中,因此它变成了 arrayformula(offset(C3:C,0)-B3:B+A3:A) 但它错误并且需要一个无休止的额外行。

任何帮助都会很棒。

解决方法

  • 使用两个总计:INOUT 并从 OUT 中减去 IN

  • 创建运行总计的经典 arrayformula 解决方案是将 SUMIF 与变量字符串(相对于 range 参数)用作 criterion

    =ARRAYFORMULA(SUMIF(ROW(A2:A7),"<="&ROW(A2:A7),A2:A7)-SUMIF(ROW(A2:A7),B2:B7))
    
  • 开放范围版本:

    =ARRAY_CONSTRAIN(ARRAYFORMULA(SUMIF(ROW(A2:A),"<="&ROW(A2:A),A2:A)-SUMIF(ROW(A2:A),B2:B)),ARRAYFORMULA(LOOKUP(2,1/(A2:A<>""),ROW(A2:A))),1)
    
,

使用:

=ARRAYFORMULA(IF((A2:A<>"")+(B2:B<>""),MMULT(TRANSPOSE((ROW(B2:B)<=
 TRANSPOSE(ROW(B2:B)))*IF(A2:A="",-B2:B,A2:A)),SIGN(IF(A2:A="",A2:A))^0),))

enter image description here


或:

=ARRAYFORMULA(IF((A2:A<>"")+(B2:B<>""),MMULT(TRANSPOSE((ROW(B2:B)<=TRANSPOSE(ROW(B2:B)))*
 IF(A2:A="",A2:A-B2:B,A2:A-B2:B)),B2:B,))

enter image description here


更新:

=ARRAYFORMULA(IF(A2:A="",MMULT(
 TRANSPOSE((ROW(INDIRECT("2:"&MAX((A2:A<>"")*ROW(A2:A))))<=
 TRANSPOSE( ROW(INDIRECT("2:"&MAX((A2:A<>"")*ROW(A2:A))))))*
 (INDIRECT("C2:C"&MAX((A2:A<>"")*ROW(A2:A)))-
  INDIRECT("D2:D"&MAX((A2:A<>"")*ROW(A2:A))))),SEQUENCE(MAX((A2:A<>"")*ROW(A2:A))-1)^0)))

enter image description here

,

谢谢各位。我尝试了@player0 方法并得到了一个关于数组变大的错误。出于某种原因,@TheMaster 版本卡在了进度条上。无论如何在谷歌帮助论坛上找到了这个

=ArrayFormula(if(len(A4:A),(SUMIF(ROW(D4:D),"<="&ROW(D4:D),D4:D)+SUMIF(ROW(C4:C),"<="&ROW(C4:C),C4:C)),))

而且似乎有效(我现在在 A4:A 中有约会)。但如果您发现任何潜在问题,请告诉我

,

更新: 我看到我从@MattKing 改编的答案与@TheMaster 之前的答案非常相似,只是我们如何强制数组公式在单元格中循环的变化。

答案: 除了 player0 的解决方案,我还找到了 a related question(player0 也有答案!),并改编了 @MattKing 的公式答案。在 C1 中尝试以下操作。

{value}

由于它最初设计为对多列求和,我不确定我是否已为您的单列实现尽可能地减少它。