您可能正在寻找如下公式:
=SUM(INDIRECT("B1:"&ADDRESS(ROW()-1,COLUMN(),4)))
Google Spreadsheet INDIRECT 返回对单元格或区域的引用,而-据我回忆-Excel INDIRECT 始终返回对单元格的引用。鉴于 Google 的 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,1
in INDEX(...,1,1)
)
SUM(INDIRECT(INDEX(def!Z:Z,2,1)&":"&ADDRESS(ROW()-1,COLUMN(),4)))
- 从 B11 到计算行的总和,因为在 Z2 我们有“B11”(2,1
in INDEX(...,2,1)
)
请注意:
名为“def”的单独工作表-您不希望行插入/删除影响该数据,因此将其保留在一边。对于添加一些验证列表以及公式中需要的其他内容很有用。
“Z:Z”符号 - 整列。你说你有很多这样的公式;)
因此,您保留了为每个公式定义起始单元格的灵活性,这不受计算表更改的影响。
顺便说一句,编写自定义函数/脚本总结单元格上方的所有行不是更容易吗?如果你喜欢 javascript,据我记得,谷歌电子表格现在有很好的脚本编辑器。您可以创建一个名为sumRowsAboveMe()的函数,而不仅仅是在工作表中使用它,就像=sumRowsAboveMe()
在工作表单元格中一样。
注意:您可能必须用分号替换逗号