为什么此 Google 表格公式适用于列中最后一个 non-empty 单元格?
Why does this Google Sheets formula for the last non-empty cell in a column work?
我正在寻找一种解决方案来找到列中的最后一个 non-empty 单元格。
找到了以下解决方案
INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))
这个解决方案工作得很好,甚至可以用空单元格和 headers - 但我不知道它是如何工作的。我试图通过将建议分成几个部分并分别查看 return 值来分析该建议 - 但后来我无法重现所需的结果。
有人可以解释一下发生了什么吗?我显然遗漏了一些东西。
C:C<>""
returns TRUE
如果单元格是 non-empty,则在对其进行算术运算时会转换为 1
。同样,它returns FALSE
或为空时为0。
然后,它乘以 ROW(C:C)
,所以每个空单元格的结果都是 0,每个 non-empty 单元格的值等于它的行号。
取最大值,即最后non-empty行的行号(称之为X)。
现在我们使用 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 = 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)
表示:“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)
我正在寻找一种解决方案来找到列中的最后一个 non-empty 单元格。
找到了以下解决方案INDEX(C:C;MAX(ROW(C:C)*(C:C<>""))
这个解决方案工作得很好,甚至可以用空单元格和 headers - 但我不知道它是如何工作的。我试图通过将建议分成几个部分并分别查看 return 值来分析该建议 - 但后来我无法重现所需的结果。
有人可以解释一下发生了什么吗?我显然遗漏了一些东西。
C:C<>""
returnsTRUE
如果单元格是 non-empty,则在对其进行算术运算时会转换为1
。同样,它returnsFALSE
或为空时为0。然后,它乘以
ROW(C:C)
,所以每个空单元格的结果都是 0,每个 non-empty 单元格的值等于它的行号。取最大值,即最后non-empty行的行号(称之为X)。
现在我们使用 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 = 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)
表示:“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)