【问题标题】:Compute subtotal rows in a spreadsheet计算电子表格中的小计行
【发布时间】:2012-04-30 18:09:03
【问题描述】:

我有一个如下所示的电子表格:

   A         B               C
1  Section   Task            Dev Hours
2  4         PROJECT TOTAL   =c3+....
3  4.1       Public site     =c4+c5+...
4  4.1.1     User Accounts   2
5  4.1.2     Daily Deal      =sum(c6:c7)
6  4.1.2.1   Model           4
7  4.1.2.2   View            2

我想要一种更好的方法来计算 C 列中非叶行的小计。当我添加/删除行时,使用 =sum 很容易出错。另外我只能在所有孩子都离开时使用它,否则它会重复计算。使用加法更容易出错并且更烦人。有没有办法告诉 {Excel,OpenOffice,LibreOffice,Google Documents} 根据 A 列中的大纲数字汇总所有后续子行的 C 列中的值?我喜欢这样的功能:

=sum_children(A2)

其中 A2 是具有当前行大纲编号的单元格。

【问题讨论】:

    标签: excel spreadsheet google-sheets openoffice-calc libreoffice


    【解决方案1】:

    您可以使用数组公式来执行此操作。对于下面的公式,我假设您的 Section 值已按上面所示进行排序。在C2 中,粘贴以下内容并按Ctrl+Shift+Enter 输入公式:

    =SUM(IF(LEFT($A3:$A$7,LEN(A2))=A2,IF(ISERROR(FIND(".",$A3:$A$7,LEN(A2)+2)),$C3:$C$7,0),0))
    

    然后您应该能够复制单元格 C2 并粘贴到下面代表父部分的任何单元格上。

    基本上,此公式会检查当前行下方的 A 列以查找以当前部分开头的字符串,并且仅对那些在当前部分 +“。”之后没有额外句点的字符串求和开发小时数。

    为避免在向表格添加其他部分时更新这些公式,您可以将数组的端点(示例公式中的A7C7)设置为超出表格底部的一行(例如A50C50)。这可能会稍微影响性能,但实际上只有当您过度使用并给自己一个 50,000 行垫时。

    【讨论】:

    • 哇,您是 Excel 向导。在 Google Docs 中,如果您将整个内容包装在 =arrayfunction() 中而不是输入 Ctrl+Shift+Enter,则此方法有效。
    • 我有点担心+2 会在大纲级别有两位数时中断,例如4.1.10.2
    • 实际上+2 在所有情况下都应该没问题。它所做的只是确保FIND() 函数在当前部分加上另一个句点之后开始寻找其他句点。因此,例如,如果当前部分是4.1.10,它会从第 8 位开始查看以下部分(即在 4.1.10 的 6 个字符之后加上一个句点)。它将查找在该字符之后没有其他句点的任何匹配部分,包括 4.1.10.104.1.10.100000
    • 啊,你是对的:它是用于跳越期间,而不是数字。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多