VSTACK
等一些 Excel native 函数允许无限数量的参数,并且它们具有如下智能感知:
我想知道如何通过 LAMBDA
定义这样一个函数。
我通过可选参数尝试了 try = LAMBDA(array1, [array2], [array3], [array4], 123)
,参数的数量不是无限的,智能感知也不完全是相同的:
最佳答案
有趣的时机 - 我昨天刚刚解决了同样的问题,因为我想访问新功能,但我不能在我的工作电脑上做早期采用者。所以我制作了每个功能的“自制”版本。这是 VSTACK
。
VSTACK =
LAMBDA( array1, array2, [array3], [array4], [array5], [array6], [array7], [array8],
LET(
pattern, MAX( 2,
3*NOT(ISOMITTED(array3)),
4*NOT(ISOMITTED(array4)),
5*NOT(ISOMITTED(array5)),
6*NOT(ISOMITTED(array6)),
7*NOT(ISOMITTED(array7)),
8*NOT(ISOMITTED(array8)) ),
stack, LAMBDA( array_1, array_2,
LET(
rows1, ROWS( array_1 ), rows2, ROWS( array_2 ),
columns1, COLUMNS( array_1 ), columns2, COLUMNS( array_2 ),
rSeq, SEQUENCE( rows1 + rows2 ),
cSeq, SEQUENCE(, MAX( columns1, columns2 ) ),
IF( ISOMITTED(array_1),
array_2,
IF( ISOMITTED(array_2),
array_1,
IF( rSeq <= rows1,
INDEX( IF( array_1 = "", "", array_1), rSeq, cSeq ),
INDEX( IF( array_2 = "", "", array_2), rSeq-rows1, cSeq ) ) ) ) )
),
SWITCH( pattern,
2, stack(array1,array2),
3, stack(stack(array1,array2),array3),
4, stack(stack(stack(array1,array2),array3),array4),
5, stack(stack(stack(stack(array1,array2),array3),array4),array5),
6, stack(stack(stack(stack(stack(array1,array2),array3),array4),array5),array6),
7, stack(stack(stack(stack(stack(stack(array1,array2),array3),array4),array5),array6),array7),
8, stack(stack(stack(stack(stack(stack(array1,array2),array3),array4),array5,array6),array7),array8), )
)
);
这不是您问题的答案。我知道没有办法制作一个带有无限数量参数的 LAMBDA
函数,所以我只是做了一个粗略但可扩展的方法来添加更多参数而不重构整个东西。
NB: It is really crude, but this was a choice. I also thought of using recursion to avoid the nesting ad infinitum, but decided in the end that putting an iteration argument would be confusing and messy in comparison. My end objective was to produce "good enough".
关于excel - 定义具有无限个参数的 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72079918/