将值从单元格复制到列的其余部分

问题描述 投票:0回答:2

任何人都可以帮我分解这个长公式,并通过检查独立元素来理解它是如何工作的吗?

它需要两个连续的列,在本例中为 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”结尾)

这个数组非常有用,但我想是否有一个更清晰的公式,或者更好的方法来完成这个任务...... 我怀疑这个公式是一种解决方法,电子表格必须有一个优雅的资源来完成此类任务。

google-sheets array-formulas
2个回答
2
投票

试试这个:

=ARRAYFORMULA(
  IF(
    ROW(A:A) > MATCH(2, 1 / (A:A <> "")),,
      VLOOKUP(ROW(A:A), FILTER({ROW(A:A), A:A}, A:A <> ""), 2)
  )
)

enter image description here

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)
  )
)

enter image description here


1
投票

用途:

=ARRAYFORMULA(IF(B:B="",, VLOOKUP(ROW(A:A), IF(A:A<>"", {ROW(A:A), A:A}), 2, 1)))
© www.soinside.com 2019 - 2024. All rights reserved.