2016-11-26 144 views
0

你好,我希望你能幫助我。 我寫了一個簡單的函數來將回報轉換爲價格。這是沒用的,但我會用它解釋我的問題。該功能起作用。它做我想要的。在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 我希望能夠使用它,我用MMULT用CTRL + SHIFT + ENTER以同樣的方式。任何建議?

非常感謝您的寶貴時間

+2

「價格」的第二維應該是1到1,現在它是'0到1',函數返回2列的數組。 – BrakNicku

+1

嘗試使用您的陣列與CSE的2列的範圍,你會看到@BrakNicku是正確的 –

+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可以解決問題。

+3

'Option Base 1'也可以修復它。我一般不喜歡'Option Base 1',但是如果給定模塊中的所有數組都被設計爲在VBA和範圍之間傳輸數據,那麼這可能是一個有效的用例。 –