为什么此 Google 表格公式适用于列中最后一个 non-empty 单元格?

Why does this Google Sheets formula for the last non-empty cell in a column work?

我正在寻找一种解决方案来找到列中的最后一个 non-empty 单元格。

我在 Google Docs Editor Help

找到了以下解决方案

INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))

这个解决方案工作得很好,甚至可以用空单元格和 headers - 但我不知道它是如何工作的。我试图通过将建议分成几个部分并分别查看 return 值来分析该建议 - 但后来我无法重现所需的结果。

有人可以解释一下发生了什么吗?我显然遗漏了一些东西。

  1. C:C<>"" returns TRUE 如果单元格是 non-empty,则在对其进行算术运算时会转换为 1。同样,它returns FALSE 或为空时为0。

  2. 然后,它乘以 ROW(C:C),所以每个空单元格的结果都是 0,每个 non-empty 单元格的值等于它的行号。

  3. 取最大值,即最后non-empty行的行号(称之为X)。

  4. 现在我们使用 INDEX 来查找 C 列中第 X 行的值。

=MAX(ROW(C:C))这样的东西自己产生1确实有点奇怪,我对此没有明确的解释,但我认为这是Google表格自动扩展某些公式在数组上,如前所述 here,因为使用 INDEX:

Many array formulas will be automatically expanded into neighboring cells, obviating the explicit use of 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 = 1FALSE = 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

现在 INDEXARRAYFORMULA 的类型,所以这也可以工作:

 =INDEX(MAX(ROW(C:C)*(C:C<>"")))

现在我们将 MAX(...) 部分移动到代表行的第二个 INDEX 参数中,作为第一个参数,我们输入我们要映射的范围:

=INDEX(C:C, MAX(ROW(C:C)*(C:C<>"")))

这转化为:

=INDEX(C:C, 5)

表示:“return C 列第 5 行的单元格”


回答您的问题,为什么 =ROW(C:C)*(C:C<>"") return 只有一个值 - 因为没有处理数组的命令,所以基本上等于:

=ROW(C1)*(C1<>"")

结果可以是 0 或 1 - 取决于参数是否

TRUE   ×  TRUE    =  1
TRUE   ×  FALSE   =  0
FALSE  ×  TRUE    =  0
FALSE  ×  FALSE   =  0

并将其包装到 MAX 就像拥有

=MAX(1)

或:

=MAX(0)