我需要一个 excel 公式来计算从固定级别到列中最后一个单元格的所有列单元格的总和。喜欢:从 S5 到最后一个 S 单元格的 SUM。
我试过了:SUM(S5:S)
但不起作用。
有一个带有行数的单元格。我可以在公式中使用变量,例如:SUM(S5:S & A1)
A1 包含行数吗?
你可以试试=SUM(OFFSET(S5,0,0,ROWS(S:S)-ROW(S5)+1))
要将 A2 到 A 列末尾的所有单元格相加,您可以使用
=SUM(A2,INDIRECT("A2:A" & ROWS(A:A)))
即使您将其放在单元格 A1 中,这也将起作用。
TL;DR:我建议使用NamedRange
s 和=INDEX(NamedRange, ROW()):INDEX(NamedRange, COUNTA(NamedRange))
. 这在输入数据更改(大小和值)和电子表格更改(更多/更少列/行)时都表现良好。您可以将此构造用作任何将数组作为参数的函数的输入,例如XLOOKUP()
.
我今天只是在寻找一个解决方案,我想出了一些基于INDEX()
和命名范围的东西,我认为它比INDIRECT()
. 练习是这样的:
第 1 部分:创建输入数组
=SEQUENCE(10)
。这将创建一个数字从 1 到 10 的数组 A1:A10。第 2 部分:基于解决方案INDIRECT()
转到单元格 B1 并输入=INDIRECT("A"&ROW()):INDIRECT("A"&COUNTA(A:A))
。
这有两个部分:一个在冒号之前,另一个在冒号之后。您正在寻找的最终结果是 A1:A10,对吗?
冒号之前的部分使用对列字母 的固定引用"A"
,以及ROW()
获取当前行号的函数——如果您的数据不是从第一行开始,这个解决方案就可以工作(只是一个细节,真的)。&
如果您不熟悉,该位用于连接字符串。最后,您从固定字母"A"
和来自 的任何数字构建字符串“A1” ROW()
。
冒号后面的部分类似,但现在我们试图获取我们正在处理的数组中最后一项的行号。我们通过使用COUNTA()
将数组A:A
作为输入传递的函数来做到这一点。
太好了,您应该在 B 列上看到输入数组的副本。为了测试,让我们将数组乘以 2。转到单元格 C1 并输入=INDIRECT("A"&ROW()):INDIRECT("A"&COUNTA(A:A))*2
。现在您应该看到输入数组翻了一番。
第 3 部分:解决方案基于INDEX()
此解决方案需要一个命名数组。为此,请选择 A 列。名称框(右上角,靠近单元格,位于功能区下方)可能会显示 A1。单击此处并为范围命名。例如,NUMBERS
。
现在转到单元格 D1 并输入=INDEX(NUMBERS, 1):INDEX(NUMBERS, COUNTA(NUMBERS))
。您将获得输入数组的另一个副本。
最后,转到单元格 E1 并输入=INDEX(NUMBERS, 1):INDEX(NUMBERS, COUNTA(NUMBERS))*2
。又是一个双倍数组。
第 4 部分:测试
好的,首先,当向输入数组添加或删除项目时,动态操作应该表现良好。转到单元格 A1 并将SEQUENCE()
参数更改为 5。然后更改为 20。从 B 列到 E 列的所有其他数组应自动调整大小,这表明两种解决方案都有效。
最后的测试:在 A 之前添加一列。看看现在将是 C 和 D 列会发生什么。
是的,如果我们改变电子表格的结构,基于的解决方案INDIRECT
表现不佳。可能有一些我还没有探索过的方法来解决这个问题,但现在我将坚持INDEX
并命名范围——顺便说一下,这似乎也是一个更清洁、更容易维护的选项。如果有人建议一种基于我“修复”解决方案的方法,INDIRECT()
我可以编辑它。
可以在此处找到有关命名范围的更多信息。