我想将多个动态大小的表彼此相邻,其中任何一个表都可能是空的。
例如,假设我有以下内容:
其中A3
公式如下:
=LET(
a, MAKEARRAY(5, A1, LAMBDA(x,y, "hello")),
b, MAKEARRAY(5, B1, LAMBDA(x,y, "world")),
c, MAKEARRAY(5, C1, LAMBDA(x,y, "!")),
final, HSTACK(a,b,c),
final
)
我想要的是生成以下内容,如果B1
设置为0
:
我的尝试从这里开始
如果A1
、B1
或中的任何一个C1
设置为 0,则该MAKEARRAY
函数会导致#VALUE!
错误,而不是优雅地生成 HSTACK 可以忽略的 0x0 数组……
IFERROR
我尝试通过在使用零时使用并创建一个空列来弥补这一点。就像这样:
=LET(
a, MAKEARRAY(5, A1, LAMBDA(x,y, "hello")),
b, MAKEARRAY(5, B1, LAMBDA(x,y, "world")),
c, MAKEARRAY(5, C1, LAMBDA(x,y, "!")),
err, MAKEARRAY(5, 1, LAMBDA(x,y, "")),
final, HSTACK(IFERROR(a, err), IFERROR(b, err), IFERROR(c, err)),
final
)
其结果为:
为了摆脱空列,我尝试使用BYCOL
创建一个掩码然后FILTER
:
=LET(
a, MAKEARRAY(5, A1, LAMBDA(x,y, "hello")),
b, MAKEARRAY(5, B1, LAMBDA(x,y, "world")),
c, MAKEARRAY(5, C1, LAMBDA(x,y, "!")),
err, MAKEARRAY(5, 1, LAMBDA(x,y, "")),
stack, HSTACK(IFERROR(a, err), IFERROR(b, err), IFERROR(c, err)),
col_mask, BYCOL(stack, LAMBDA(col, COUNTBLANK(col)<>5)),
final, FILTER(stack, col_mask)
final)
产生#CALC!
。我认为这是由于BYCOL(stack,...)
函数调用造成的。
我认为 Excel 无法处理数组数组,因为如果我将BYCOL
和拆分FILTER
成单独的单元格,这实际上是可行的。例如,
看起来A10
像:
=LET(
col_mask, BYCOL(A3#, LAMBDA(col, COUNTBLANK(col)<>5)),
final, FILTER(A3#, col_mask),
final
)
不使用 VBA 是否可以在单个单元格中完成此操作?
这是对现有公式的快速修复:
• 单元格中使用的公式A3
或者,也可以使用以下命令:
BYCOL()
with的替代用法MMULT()
MAKEARRAY()
也可以排除:我的建议是使用如下公式: