填写 ={ARRAYFORMULA()} 中的空白单元格

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

我有一张包含稀疏数据的人性化工作表:

PART  | FRUIT
---------------
Alpha | 
      | Apples
      | Pears
Beta  |
      | Lemons
      | Oranges

我想创建第二个自动更新的机器友好工作表,该工作表将填充 PART 列中的所有空单元格:

PART  | FRUIT
---------------
Alpha | 
Alpha | Apples
Alpha | Pears
Beta  |
Beta  | Lemons
Beta  | Oranges

我可以在机器友好的工作表上的“水果”列中保留空白单元格。但理想情况下我希望删除这些行:

PART  | FRUIT
---------------
Alpha | Apples
Alpha | Pears
Beta  | Lemons
Beta  | Oranges

如果我想在机器友好的工作表中使用插值,我会依靠

MATCH
技巧
FILTER
粘贴到任何地方公式

但我真的想避免在添加、更改或删除原始工作表中的行时更新机器友好的工作表。 (如果我向原始工作表添加新列,则必须更新它,我没问题。)这意味着使用手动插值是禁止的。

理想情况下,我会在第二张纸上输入一个魔法

={ARRAYFORMULA()}
或某种
=QUERY
,然后别管它。

={ ARRAYFORMULA(MAGIC(PART)), FRUIT }

但到目前为止,我还无法弄清楚如何解决这个问题。有什么建议吗?

if-statement google-sheets vlookup array-formulas nested-if
1个回答
5
投票

在第 2 行使用:

=ARRAYFORMULA(IF(B2:B="",, VLOOKUP(ROW(A2:A), IF(A2:A<>"", {ROW(A2:A), A2:A}), 2, 1)))

更新

由于 SCAN 和 LAMBDA 函数已添加到 google 表格中,我们可以使用更短的公式更快地完成此操作:

=SCAN(, A2:A7, LAMBDA(a, b, IF(b="", a, b)))

enter image description here

要检测 B 列范围的末尾,我们可以将 A2:A7 替换为:

=SCAN(, A2:INDEX(A:A, MAX(ROW(B:B)*(B:B<>""))), LAMBDA(a, b, IF(b="", a, b)))

enter image description here


此外,我们可以使用 LET 删除 B 列中的空格

=LET(r, A2:INDEX(A:A, MAX(ROW(B:B)*(B:B<>""))), 
     x, SCAN(, r, LAMBDA(a, b, IF(b="", a, b))), 
     FILTER({x, OFFSET(r,,1)}, OFFSET(r,,1)<>""))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.