我有一个 53 行 16 列的电子表格。一年中每过一周,就会有一行填满来自 16 个人的数据。
我希望底行始终代表一个人的当前分数(因为我们处于今年的第 9 周,单元格 A53 当前具有公式 =A9)。
但是,当第 10 周到来并且第十行已填满时,我必须将公式更改为 =A10。我想找到一种方法来自动选择底部已填满的行,而不必每周更改公式。
我已经看到了相关问题在 Excel 中自动选择一组中的最后一行但该解决方案对我来说不起作用。
答案1
假设数据是数字,尝试 LOOKUP,在 A53 中复制到:
=LOOKUP(9.9E+307,A1:A52)
答案2
您不需要安装任何额外的附加组件 - 只需输入以下内容A53
:
=INDIRECT("A"&COUNTA(A$1:A$52))
对于你的情况,它将返回范围内的最后一个非空值A1:A52
。您可以根据需要更正范围,但请确保保留行引用绝对以避免公式向下移动时出现错误。但是,您可以自动填充到所有 16 个列- 仅列会循环。
答案3
如果你安装了分析工具包,你可以访问WeekNum(序列,返回)功能。
如果程序总是在一年的第一周开始,您可以设置一个使用 WeekNum() 的 Indirect 语句来选择从哪里获取信息。例如:
=Indirect(连接("A", WeekNum(Today()))
在您想要最新数据的单元格中。如果程序在其他时间启动,您可以计算出它是在一年中的哪一周开始的,然后从公式的 WeekNum() 部分中减去这个数字。例如,如果您从第 10 周开始(因此第 11 周的结果在 A3 中,假设标题在第 1 行):
=Indirect(Concatenate("A", WeekNum(Today()-9))
注意:我现在没有在装有 Excel 的机器前,因此语法可能有点不对。您可能还需要检查有关标题行等的数学运算,但这应该很简单。
答案4
总结答案并添加我的2c:
您通常需要执行两个步骤:
找出您想要获取的行。以下选项
=COUNTA($A$1:$A$52)
- 将计算所有元素 - 但忽略空白。因此,如果有人没有输入第 7 周,而是输入了第 8 周和第 9 周,这将返回 8=WEEKNUM(TODAY())
- 返回当前周数。它会在周一立即切换周数 - 即使尚未输入任何数据。=MATCH("",$A$1:$A$52,0)
- 这将返回第一行空白(因此请与一起使用-1
。
获得行号后(用于
N
步骤 1 的结果/公式),你需要告诉 Excel 返回第 N 个行。为此,您有多种选择:=INDIRECT("A"&N)
- 这将构造地址,比如A9然后返回该单元格中的值=OFFSET($A$1,N-1)
- 这将使用A1作为起始单元格,将其偏移N-1行并返回此结果=INDEX($A$1:$A$52,N)
- 这将返回范围 A1:A52 中的第 N 个元素。
就你的情况而言,每个选项都同样适合,这取决于个人喜好。但是,如果你在复杂模型中使用了大量这些公式,则该
INDEX
公式优于OFFSET
和,INDIRECT
因为它非挥发性。这意味着 Excel 只计算一次 - 并且只有当其前任发生变化时才计算。INDIRECT
另一方面OFFSET
易挥发的,因此 Excel 会始终计算它们 - 即使其前任单元格均未发生任何变化 - 因此也会计算所有依赖单元格!这意味着每次重新计算将比使用INDEX
现在您只需将第一步和第二步合并为一个连接公式,例如,=INDEX($A1:$A$52,WEEKNUM(TODAY()))
您就完成了。
Barry 的回答=LOOKUP(9.9E+307,A1:A52)
是一个很好的技巧:它总是会返回最后一个非空白的值(从上到下)。