如何使用Excel表格结构引用创建运行总计?

19

我正在寻找一种使用Excel表格结构引用创建一个累加总和(当前行及以上行的总和)的方法。

我知道如何使用旧的基于行/列的方法来实现:
=SUM($A$2:$A2)

我也知道如何使用结构引用来计算整个列的总和:
=SUM([WTaskUnits])

我知道如何使用[#ThisRow]获取当前单元格,但我不确定如何获取表格的第一行以在SUM中使用它。

8个回答

34

实际上,我只是发现了一种使用INDEX的方法,但感觉应该有更加结构化和规范的引用方式。不过,对于其他人想要实现这个功能的话,下面是我想出来的方法:
=SUM(INDEX([WTaskUnits],1):[[#This Row],[WTaskUnits]])

我使用INDEX获取列的第一个单元格(相当于我的行/列示例中的$A$2),并正常使用[#This Row]获取当前行的单元格(相当于我的行/列示例中的A2)。


在我看来,这是解决你的问题最好的方式之一。别忘了你可以接受自己的答案 :) - JMax
12
你也可以使用这个公式:=SUM(INDEX([WTaskUnits],1):[@WTaskUnits])。 - Ivan Neeson
这个会在底层进行优化吗?还是它真的会一遍又一遍地冗余求和初始段? - Alan

2
我知道这是一个旧帖子,但我有一个解决方案要提供。
=IF(ISNUMBER(OFFSET([@Balance],-1,0)),OFFSET([@Balance],-1,0)+[@Amount],[@Amount])

在第一行数据实例中,偏移量指向标题,而标题并不是一个数字,因此结果只有 Amount 列。

其余的行给出了从 OFFSET 加上当前行的 Amount 的前一个 Balance


2
=SUM(OFFSET([WTaskUnits],0,0,ROW()-ROW([[#Headers],[Running Total]])))

表格有两列[WTaskUnits]和[Running Total]。上述公式将根据请求的范围对单元格范围求和。
OFFSET函数的第一个参数定义了求和的起始点。第四个参数,
ROW()-ROW([[#Headers],[Running Total]]

是一个有用的习语,用于表示表格中当前行的编号。


2

请注意,如果您使用的是 =SUBTOTAL(109,...) 而不是 =SUM(...),则您的公式将遵守表格上的筛选。


1
使用以下公式:
   =SUM( INDEX([Values],1) : [@Values] )

我们使用INDEX函数返回Values列中的第一个单元格,并简单地使用当前行的结构化引用返回我们想要求和的范围中的第二个单元格。 来源

1

不确定您所说的“更有结构”,您现在的做法也很好。您还可以简单地从表头下面的单元格开始设置范围:

OFFSET([[#Headers],[WTaskUnits]],1,0,1,1):

但我不会称之为更有结构化,只是不同而已。在列的部分行范围内没有表格参考,所以我的建议是坚持你现在所拥有的。


谢谢,得到确认感觉很好。使用结构引用时,他们没有添加更多的行支持有点令人惊讶。我猜他们认为在它周围使用现有的公式,如INDEX和OFFSET就足够了。 - studgeek

0

我使用 Excel 的数据透视表创建了我的累计总数:

  • 求和值 -> 总计…
  • 显示值为 -> 累计

我的两分钱,迟到了五年(也许错过了重点)。


看起来你正在使用数据透视表,而问题提出者正在寻找普通的 Excel 表格解决方案(即非数据透视表)。 - dav

-1

对于一个固定的数据表: 1. 转到您想要进行小计的列中的最后一个单元格 2. 对包含数据的列进行小计并绝对引用第一行 3. 将公式复制到第一行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接