将数组或范围传递给VBA udf

时间:2014-07-12 10:41:16

标签: arrays excel vba

我正在尝试将数组传递给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次。

1 个答案:

答案 0 :(得分:1)

如果您希望USERFUNC1返回inp范围内的值数组,那么只需:

function USERFUNC1(inp as Range) as Variant
    USERFUNC1 = inp
End function

这将是一个基于1的二维数组,其中第一个维度代表行,第二个维度是原始范围中的列inp。

我不确定你的目标是什么,但你可能甚至不需要USERFUNC1