任何人都可以帮我分解这个长公式,并通过检查独立元素来理解它是如何工作的吗?
它需要两个连续的列,在本例中为 A 和 B。 首先从 A 中获取一个值。 如果 A 下方有下一个值,它将重复实际值直到该行。 如果 A 中没有剩余值,则返回“”(空白)
所以,在“B1”中我们写了这个很长的公式:
ArrayFormula(IF(ROW(A:A)<=MATCH(2;1/(A:A<>"");1);LOOKUP(ROW(A:A);ROW(A:A)/IF(A:A<>"";TRUE;FALSE);A:A);))
结果是这样的:
A | B |
---|---|
富 | foo (公式如下) |
富 | |
酒吧 | 酒吧 |
酒吧 | |
酒吧 | |
qux | qux |
(空白) | |
(空白) | |
(空白) | |
(空白单元格一直持续到文件末尾,因为列 A 以“qux”结尾) |
这个数组非常有用,但我想是否有一个更清晰的公式,或者更好的方法来完成这个任务...... 我怀疑这个公式是一种解决方法,电子表格必须有一个优雅的资源来完成此类任务。
试试这个:
=ARRAYFORMULA(
IF(
ROW(A:A) > MATCH(2, 1 / (A:A <> "")),,
VLOOKUP(ROW(A:A), FILTER({ROW(A:A), A:A}, A:A <> ""), 2)
)
)
MATCH(2, 1 / (A:A <> ""))
为您提供列中最后一个非空单元格的行号 A:A
。
或者如果顶部可能有空白单元格,则使用附加条件:
=ARRAYFORMULA(
IF(
(ROW(A:A) > MATCH(2, 1 / (A:A <> "")))
+ (ROW(A:A) < MATCH("*", A:A,)),,
VLOOKUP(ROW(A:A), FILTER({ROW(A:A), A:A}, A:A <> ""), 2)
)
)
用途:
=ARRAYFORMULA(IF(B:B="",, VLOOKUP(ROW(A:A), IF(A:A<>"", {ROW(A:A), A:A}), 2, 1)))