在excel中返回数组的VBA函数

时间:2016-11-26 12:57:50

标签: excel vba excel-vba

大家好,我希望你能帮我解决这个问题。 我写了一个简单的函数来将回报转换为价格。它没用,但我会用它来解释我的问题。该功能有效。它做我想要的。

Function ret2prices(ByVal r As Range)

    Dim temp() As Variant
    temp = r

    Dim prices() As Variant
    ReDim prices(1 To (UBound(temp, 1) + 1), 1)
    prices(1, 1) = 1

    For i = 2 To UBound(prices, 1)
        prices(i, 1) = 1 + temp(i - 1, 1)
        prices(i, 1) = prices(i - 1, 1) * prices(i, 1)
    Next i

    ret2prices = prices

End Function

问题是,当我在excel工作表中使用它时,它总是返回0。 我希望能够以与CTRL + SHIFT + ENTER使用MMULT相同的方式使用它。有什么建议吗?

非常感谢你的时间

1 个答案:

答案 0 :(得分:3)

VBA中的数组是从0开始的,所以:

ReDim prices(1 To (UBound(temp, 1) + 1), 1)

相当于

ReDim prices(1 To (UBound(temp, 1) + 1), 0 To 1)

有问题的代码返回了预期的结果,但是在结果数组的第二列中。将第二维的下限更改为1可以解决问题。