【问题标题】:Arrayformula for total in simple cashbook简单现金簿中总计的数组公式
【发布时间】:2020-12-31 16:11:06
【问题描述】:

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

A B C
1 IN OUT TOTAL
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,-1,0)-B3:B+A3:A),但它出错并需要额外的一行无休止地继续下去。

任何帮助都会很棒。

【问题讨论】:

    标签: google-sheets google-sheets-formula spreadsheet array-formulas cumulative-sum


    【解决方案1】:
    • 使用两个运行总计:INOUT 并从 IN 中减去 OUT

    • 创建运行总计的经典数组公式解决方案是使用带有可变字符串(相对于range 参数)的 SUMIF 作为criterion

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 你能分享一份你的工作表吗?
      • 如果您将问题中的表格复制粘贴到新工作表中的 A1,我的解决方案有效。如果您的数据结构与显示的不同,您可能需要调整范围
      【解决方案3】:

      使用:

      =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="", -B2:B, A2:A))^0), ))
      


      或:

      =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)), 
       SIGN(IF(A2:A="", B2:B, A2:A))^0), ))
      


      更新:

      =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)))
      

      【讨论】:

        【解决方案4】:

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

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

        ={"Total";
        ARRAYFORMULA(SUMIF(SEQUENCE(ROWS(A2:A),1),"<="&SEQUENCE(ROWS(A2:A),1,1,1),A2:A) -
                     SUMIF(SEQUENCE(ROWS(B2:B),1),"<="&SEQUENCE(ROWS(B2:B),1,1,1),B2:B) )}
        

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

        【讨论】:

          猜你喜欢
          • 2010-12-09
          • 2022-11-10
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多