无需VBA如何用Excel LAMBDA动态接收多参数构造自定义数组
注意:本问题涉及的可选LAMBDA参数、ISOMITTED函数等功能,在撰写时仅Beta通道版本支持。
需求描述
需要在Excel LAMBDA函数中模拟VBA的ParamArray特性,实现支持如下调用格式的函数:
=ARRAY(arg_1, [arg_2], [arg_3], ...)
该函数需根据传入的参数数量,动态返回对应长度的数组{arg_1, arg_2, arg_3, ...}。
如果提前知晓参数数量,可通过CHOOSE函数实现,写法如下:
=CHOOSE(SEQUENCE(number_of_args), arg_1, arg_2, arg_3, ...)
但该方案需要额外传入参数总数,不符合自动识别参数数量的需求。曾考虑过用ISOMITTED(arg_n)做二分查找定位第一个缺失参数,但该方式会硬编码ARRAY函数的参数上限,还需要编写复杂的硬编码二叉树逻辑,不符合预期。
现有VBA实现的局限性
该功能用VBA实现逻辑非常简单,代码如下:
Public Function ARRAYFROMARGS(ParamArray args()) As Variant ARRAYFROMARGS = args End Function

不过VBA实现版本仅支持可转换为Variant类型的值,无法传入lambda或链接数据类型,灵活性远低于非VBA实现的版本,因此需求可行的非VBA实现方案。
内容的提问来源于stack exchange,提问作者Greedo
相关产品推荐
相关产品推荐

