我有一张包含稀疏数据的人性化工作表:
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 }
但到目前为止,我还无法弄清楚如何解决这个问题。有什么建议吗?
在第 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)))
要检测 B 列范围的末尾,我们可以将 A2:A7 替换为:
=SCAN(, A2:INDEX(A:A, MAX(ROW(B:B)*(B:B<>""))), LAMBDA(a, b, IF(b="", a, b)))
此外,我们可以使用 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)<>""))