我正在尝试将数组传递给UDF以避免大量重复代码。举个简单的例子:
function USERFUNC1(inp as variant)
Dim array_size As Integer
dim i as integer
dim values as double
array_size = WorksheetFunction.CountA(inp)
for i = 1 to array_size
values = values + inp(i)
Next i
USERFUNC1 = values
End function
function USERFUNC2(input1 as variant, input2 as variant)
Dim array_size As Integer
dim i as integer
dim values as double
array_size = WorksheetFunction.CountA(input1)
redim nested_array(array_size)
for i = 1 to array_size
nested_array(i) = input1(i)+input2(i)
Next i
USERFUNC2= USERFUNC1(nested_array)
End function
在我创建的示例中,我有内部传递给UDF的嵌套数组。但是,在运行时会导致by ref错误。我确信这可以做到,但我似乎缺少一些东西
修改
似乎我写的东西引起了混乱,基本上我有很多功能,上面只是为了展示这个想法。在某些单元格中,我使用函数(称之为“逸度”)计算值,该值将值从工作表中取出到数组中。在另一个函数(相平衡)中,我需要使用在第二函数内计算的值在第二函数(相平衡)内执行相同的计算(逸度)。这要求我将数组从第二个函数传递到第一个函数,或者在第二个函数内再次写出整个第一个函数。
我可以这样做但是它使第二个函数更难调试,因为我不能再确定嵌套计算是否正在执行正确的计算,而是我需要检查整个事情。到目前为止,我在第一行中有大约250行代码,在第二行中有300行代码,在第二行内(相平衡)我需要执行第一次(逸度)4次。
答案 0 :(得分:1)
如果您希望USERFUNC1返回inp范围内的值数组,那么只需:
function USERFUNC1(inp as Range) as Variant
USERFUNC1 = inp
End function
这将是一个基于1的二维数组,其中第一个维度代表行,第二个维度是原始范围中的列inp。
我不确定你的目标是什么,但你可能甚至不需要USERFUNC1