Google Spreadsheet总和,总是在上面的单元格上结束

Dru*_*ion 37 google-sheets

如何创建一个总是在上面的单元格上结束的Google Spreadsheet sum(),即使添加了新单元格也是如此?我在每一列上都有几个这样的计算,所以这样的解决方案无济于事.

例:

在B列,我有几个动态范围,必须加总.B1..B9应在B10上求和,B11..B19应在B20上求和.我有几十个这样的计算.我不时地在最后一个求和行下面添加行,我希望将它们添加到总和中.我在第10行之前添加了一个新行(称之为9.1),在第20行之前添加了一个新的原始(我们称之为19.1).我希望B10包含B1到B9.1和B20之和以包含B11的总和: B19.1.

在excel上,我有偏移功能,就像魅力一样.但是如何使用谷歌电子表格呢?我试着使用这样的公式:

=SUM(B1:INDIRECT(address(row()-1,column(),false)))   # Formula on B10
=SUM(B11:INDIRECT(address(row()-1,column(),false)))  # Formula on B20
Run Code Online (Sandbox Code Playgroud)

但是在Google Spreadsheet上,它给出的只是一个#name错误.

我浪费了几个小时试图找到一个解决方案,也许有人可以打个招呼?请指教

阿姆农

Psy*_*ish 59

您可能正在寻找以下公式:

=SUM(INDIRECT("B1:"&ADDRESS(ROW()-1,COLUMN(),4)))

Google Spreadsheet INDIRECT返回对单元格或区域的引用,而 - 从我记得 - Excel INDIRECT返回始终引用单元格.鉴于谷歌的INDIRECT确实有一些困难,当你尝试在SUM中使用它作为单元格引用时,你想要的是用整个范围来提供SUM,例如a1表示法:"B1:BX".

您可以使用与EXCEL相同的方式获得所需的地址(注意"4"表示行/列相对,默认情况下,Google INDIRECT返回绝对值):

ADDRESS(ROW()-1,COLUMN(),4)

而不是通过与起始单元连接来使用它为SUM函数准备范围字符串.

"B1:"&

然后用INDIRECT将它包起来,这将返回要汇总的区域.

从Druvision引用下面的答案(我不能发表评论,我不想增加答案)

每次插入/删除行以使所有行看起来像以下时,而不是耗时的公式更正:

=SUM(INDIRECT(ADDRESS(ROW()-9,COLUMN(),4)&":"&ADDRESS(ROW()-1,COLUMN(),4)))

您可以在单独的表格中保留一列用于保存变量(让我们将其命名为"def"),假设为Z,以定义起点,例如在Z1中写入"B1",在Z2中写入"B11"等,而不是将其用作变量使用INDEX您的总和:

SUM(INDIRECT(INDEX(def!Z:Z,1,1)&":"&ADDRESS(ROW()-1,COLUMN(),4)))- 从B1到计算行的总和,因为在Z1中我们有"B1"(1,1in INDEX(...,1,1))

SUM(INDIRECT(INDEX(def!Z:Z,2,1)&":"&ADDRESS(ROW()-1,COLUMN(),4)))- 从B11到计算行的总和,因为在Z2中我们有"B11"(2,1in INDEX(...,2,1))

请注意:

  1. 名为'def'的单独工作表 - 您不希望行插入/删除影响该数据,因此将其保留在一边.用于添加一些验证列表,以及公式中需要的其他东西.

  2. "Z:Z"符号 - 整列.你说你有很多这样的公式;)

因此,您可以灵活地为每个公式定义起始单元格,这不受计算表更改的影响.

顺便说一下,编写自定义函数/脚本总结单元格上方的所有行不是更容易吗?如果你觉得像javascripting,我记得,谷歌电子表格现在有很好的脚本编辑器.您可以创建一个名为sumRowsAboveMe()的函数,而不仅仅=sumRowsAboveMe()在表格单元格中使用它.

注意:您可能必须用分号替换逗号

  • 如果您正在为列的开头硬编码列,那么也可以在该范围的末尾对其进行硬编码.然后它可以简化为`= SUM(INDIRECT("B1:B"和ROW() - 1))` (6认同)
  • 想必是问题出现后才加入了偏移功能。但索引函数似乎也有效 =sum(B1:index(B:B,row()-1)) (2认同)

小智 5

注意 在测试此答案后,仅当由于循环依赖错误导致总和位于不同的列中时,它才会起作用。否则,该解决方案是有效的。

这有点代数,但我们可以利用电子表格的右下角拖动。

=SUM(X:X) - SUM(X2:X)
Run Code Online (Sandbox Code Playgroud)

其中 X 是您正在使用的列, X2 是您的结尾。向下拖动公式,Sheets 将增加 X2,从而更改终点。

*你提到你有几十个这样的计算。因此,为了满足您的确切需求,我们将减去您的最后一个总和以获得我们想要的“中间”范围。

例如

B1..B9 应在 B10 上求和,B11..B19 应在 B20 上求和

由于前面提到的循环依赖错误,我无法准确地解决它并将总和放在同一行上,但这可以在总和需要存储在不同列中的其他情况下工作。

=SUM(B:B) - SUM(B9:B) //Formula on C10 (Sum of B1..B9)
=SUM(B:B) - SUM(B19:B) - B10 // Formula on C20 (Sum of B11..B19)
Run Code Online (Sandbox Code Playgroud)