我在寻找一种方法来查找一列中最后一个非空单元格的解决方案。
我在Google Docs编辑器帮助中找到了以下解决方案:
INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))
这个解决方案完美地解决了问题,甚至可以处理空单元格和标题 - 但我无法弄清它是如何工作的。我试图通过将建议拆分成其部分并分别查看返回值来进行分析,但是我无法复制所需的结果。
有人能够解释发生了什么吗? 我显然漏掉了一些东西。
我在寻找一种方法来查找一列中最后一个非空单元格的解决方案。
我在Google Docs编辑器帮助中找到了以下解决方案:
INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))
这个解决方案完美地解决了问题,甚至可以处理空单元格和标题 - 但我无法弄清它是如何工作的。我试图通过将建议拆分成其部分并分别查看返回值来进行分析,但是我无法复制所需的结果。
有人能够解释发生了什么吗? 我显然漏掉了一些东西。
=ARRAYFORMULA(ROW(C:C))
1
2
3
4
5
6
7
...
=ARRAYFORMULA(C:C<>"")
如果C列中的单元格不为空,则输出TRUE
(否则为FALSE
)
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
FALSE
...
=ARRAYFORMULA(ROW(C:C)*(C:C<>""))
执行此操作(注意在PC逻辑中,TRUE = 1
和FALSE = 0
)
1 × TRUE = 1
2 × TRUE = 2
3 × TRUE = 3
4 × FALSE = 0
5 × TRUE = 5
6 × FALSE = 0
7 × FALSE = 0
... × ... = ...
=ARRAYFORMULA(MAX(ROW(C:C)*(C:C<>"")))
将输出最高的数字,因此在这种情况下:
5
INDEX
是ARRAYFORMULA
类型,所以这也可以工作: =INDEX(MAX(ROW(C:C)*(C:C<>"")))
MAX(...)
部分移动到第二个 INDEX
参数中,该参数表示行,而我们输入要映射的范围作为第一个参数:=INDEX(C:C, MAX(ROW(C:C)*(C:C<>"")))
this translates to:
=INDEX(C:C, 5)
这意味着:“返回C列第5行的单元格”。
回答你的问题,为什么=ROW(C:C)*(C:C<>"")
只返回一个值 - 这是因为没有命令来处理数组,所以基本上它等同于:
=ROW(C1)*(C1<>"")
结果可以是0或1 - 取决于参数是否
TRUE × TRUE = 1
TRUE × FALSE = 0
FALSE × TRUE = 0
FALSE × FALSE = 0
MAX
中就像拥有一样。=MAX(1)
或者:
=MAX(0)
=MAX(ROW(C:C)*(C:C<>"")
或者ROW(C:C)*(C:C<>""
单独使用总是返回0呢? - Ze4Kuada