Excel - SUM 到列表末尾
Posted
技术标签:
【中文标题】Excel - SUM 到列表末尾【英文标题】:Excel - SUM to the end of the list 【发布时间】:2011-07-13 09:23:09 【问题描述】:我在 Excel 2003 中有一个类似数据库的表,在第 6 行有一个包含 AutoFilters 的标题行,以及从第 7 行到第 160 行的数据。第 1 - 5 行是工作表标题、列组标题和我无法摆脱的指令。
我还在此区域中为数字列显示SUM(X6:X160)
和SUBTOTAL(109,X6:X160)
。我不想在表格底部显示它,因为有几个用户经常向该表格添加行并且他们定期销毁公式。
问题:每当用户将数据添加到表的末尾时,就需要更新 SUM 和 SUBTOTAL 公式以扩大范围 - 不用说 - 大多数人都忘记了。 p>
我可以自己扩展公式以覆盖所有行,直到 -say-row 500 并隐藏剩余的行,因此用户需要在到达表格的可见端时“插入”行 - 这反过来会更新公式,但我不认为这是一种非常安全的方式......了解我的用户。
问题:有没有办法从 X6“到列 X 的末尾”创建 SUM 和 SUBTOTAL?
结论
我使用 SUM(OFFSET(....)),从标题中的一个新字段中获取“高度”参数,该字段以 =COUNTA($A:$A)-1
显示“记录数”(列标题文本为 -1这也被计算在内),因为从业务上下文中可以清楚地看出,对于任何有效的数据记录,A 列中必须存在一个键值,并且不允许有空行(我至少可以培训用户那么多)-加上用户利益不仅可以看到 SUM,现在还可以看到标题冻结窗格中的 COUNT 条记录。
【问题讨论】:
【参考方案1】:好吧,我认为您可以使用 =SUM(C:C) 之类的方法对 C 列中的所有单元格求和,它会自动排除文本我尝试过它并且它有效
【讨论】:
【参考方案2】:使用 Offset() 和 Count() 似乎是最流行的,而且我确信使用起来效率最高。
=SUM(OFFSET($X$6,0,0,COUNT($X$6:$X$1000)))
就个人而言,我倾向于使用 Indirect() 很多东西。它可能会运行得更慢,但它可以工作。它可以帮助我查看正在创建的范围。不过要小心,因为范围的一部分保存在文本中,所以当您移动公式时它不会更新。那会让你绊倒。反正你来了。
=SUM(INDIRECT("$X$6:$X$" & COUNT($X$6:$X$1000)))
您可以使用 iDevlop 指出的动态范围或将 Offset() 或 Indirect() 放在 Sum() 中,例如我刚做了。
无论哪种方式你都要小心,因为 Indirect() 和 Offset() 是Volatile Functions。通常你想避免这种情况。
我还找到了this guy,他使用了 Index() 和 Match(),它们不是 volatile 函数。
编辑:
考虑一下(因为我刚刚在我的电子表格上做过)..
如果您知道您的数据会有合理的限制,例如 1000,您可以只使用 =SUM($X$6:$X$1000)
,它会跳过空白,即使是小计方法 1 或 101(平均)。
【讨论】:
如果您有任何空白单元格,则偏移量会下降,因为您从每个空白单元格的 SUMmed 范围中丢失了 1 行【参考方案3】:当然!而且我发现将总数放在顶部会更好,因为您还可以冻结第一行以保持这些总数可见。 只需向 Google 询问“Excel 动态范围”即可。这里有几个链接:http://www.ozgrid.com/Excel/DynamicRanges.htmhttp://support.microsoft.com/kb/830287
这一切都是通过 Offset() 和 Count() 函数的组合完成的。
【讨论】:
【参考方案4】:将此公式放在数据范围的最后一行(不能是表格/列表)这可能会解决您的问题
=SUM(INDIRECT(("x6:x"&ROW()-1)))
或者如果你有表格/列表,那么你可以使用这个公式
=sum([table header name])
就像你想总结类型标题的“金额”列
=sum([Amount])
在列表/表格的最后一行
【讨论】:
以上是关于Excel - SUM 到列表末尾的主要内容,如果未能解决你的问题,请参考以下文章
将excel中的相同公式复制到列中的每个单元格但只更改公式? [重复]
我有一个大型 CSV 文件,其中包含单个列中的信息。如何使用 python 在 excel 中复制“文本到列”任务? [复制]