如何解决为什么列中最后一个非空单元格的此Google表格公式有效?
我正在寻找一种解决方案,以查找列中的最后一个非空单元格。
我在Google Docs Editor Help找到了以下解决方案
INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))
此解决方案可以很好地工作,甚至可以处理空单元格和标头-但我不知道它是如何工作的。我试图通过将建议切成小段并分别查看返回值来分析建议,但后来无法重现所需的结果。
有人可以解释发生了什么吗?我显然缺少了一些东西。
解决方法
-
C:C<>""
如果单元格为非空,则返回TRUE
,在对单元格进行算术运算时会转换为1
。同样,它为空时返回FALSE
或0。 -
然后,将其乘以
ROW(C:C)
,因此每个空单元格的结果都为0,每个非空单元格的值都等于其行号。 -
采用最大值,即最后一个非空行的行号(称为 X )。
-
现在,我们使用INDEX在C列中找到第 X 行的值。
=MAX(ROW(C:C))
之类的东西自己产生1确实有点奇怪。我对此没有明确的解释,但是我认为这是Google表格自动将某些公式扩展到数组上的原因,如{ {3}},因为使用了INDEX
:
,许多数组公式将自动扩展到相邻的单元格中,从而避免了
ARRAYFORMULA
的显式使用。
=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<>"")))
这翻译成:
=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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。