为什么列中最后一个非空单元格的这个 Google 表格公式有效?

Ze4*_*ada 5 arrays google-sheets array-formulas google-sheets-formula

我正在寻找一种解决方案来查找列中的最后一个非空单元格。

我在Google Docs Editor Help 中找到了以下解决方案

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

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

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

pla*_*er0 3

=ARRAYFORMULA(ROW(C:C)) \n
Run Code Online (Sandbox Code Playgroud)\n

将输出行号,例如:

\n
1\n2\n3\n4\n5\n6\n7\n...\n
Run Code Online (Sandbox Code Playgroud)\n
\n
=ARRAYFORMULA(C:C<>"")\n
Run Code Online (Sandbox Code Playgroud)\n

TRUE如果 C 列中的单元格不为空,则输出(否则)FALSE

\n
TRUE\nTRUE\nTRUE\nFALSE\nTRUE\nFALSE\nFALSE\n...\n
Run Code Online (Sandbox Code Playgroud)\n
\n
=ARRAYFORMULA(ROW(C:C)*(C:C<>""))\n
Run Code Online (Sandbox Code Playgroud)\n

将执行此操作(请注意PC 逻辑中的TRUE = 1和)FALSE = 0

\n
1   \xc3\x97   TRUE    =     1     \n2   \xc3\x97   TRUE    =     2\n3   \xc3\x97   TRUE    =     3\n4   \xc3\x97   FALSE   =     0\n5   \xc3\x97   TRUE    =     5\n6   \xc3\x97   FALSE   =     0\n7   \xc3\x97   FALSE   =     0\n... \xc3\x97   ...     =     ...\n
Run Code Online (Sandbox Code Playgroud)\n
\n
=ARRAYFORMULA(MAX(ROW(C:C)*(C:C<>"")))\n
Run Code Online (Sandbox Code Playgroud)\n

将输出最大的数字,因此在这种情况下:

\n
5\n
Run Code Online (Sandbox Code Playgroud)\n
\n

nowINDEX是这样的类型,ARRAYFORMULA所以这也可以工作:

\n
 =INDEX(MAX(ROW(C:C)*(C:C<>"")))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
=INDEX(C:C, MAX(ROW(C:C)*(C:C<>"")))\n
Run Code Online (Sandbox Code Playgroud)\n

这翻译为:

\n
=INDEX(C:C, 5)\n
Run Code Online (Sandbox Code Playgroud)\n

这意味着:“返回 C 列中第 5 行的单元格”

\n
\n

回答你的问题为什么=ROW(C:C)*(C:C<>"")只返回单个值 - 这是因为没有命令来处理数组所以基本上这等于:

\n
=ROW(C1)*(C1<>"")\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
TRUE   \xc3\x97  TRUE    =  1\nTRUE   \xc3\x97  FALSE   =  0\nFALSE  \xc3\x97  TRUE    =  0\nFALSE  \xc3\x97  FALSE   =  0\n
Run Code Online (Sandbox Code Playgroud)\n

将其包裹起来MAX就像

\n
=MAX(1)\n
Run Code Online (Sandbox Code Playgroud)\n

或者:

\n
=MAX(0)\n
Run Code Online (Sandbox Code Playgroud)\n