2016-05-29 12 views
0

函數的計算是在循環中實現的,最後函數被設置爲等於循環所實現的數組。該功能正常工作。然而,當我編寫一個sub來返回數組(並將輸入再次定義爲範圍)時,會出現錯誤,因爲之前在循環中的函數中使用了輸入,並且我的猜測是sub會將其視爲覆蓋。在一個子程序中,當調用一個包含一個循環的自寫函數時,如何避免循環中函數輸入重用的複雜性?

Function discount_factors(swap_rates As Range) As Variant 

    Dim swap_matrix(1 To 5, 1 To 5) As Double 

For i = 1 To 5 
    For j = 1 To 5 
     swap_matrix(i, j) = 0 
    Next j 
Next i 

For i = 1 To 5 
    For j = 1 To 5 - i 
     swap_matrix(i + j, i) = swap_rates(j + i, 1) 
    Next j 
    swap_matrix(i, i) = 1 + swap_rates(i, 1) 
Next i 

inverse_matrix = Application.WorksheetFunction.MInverse(swap_matrix) 


Dim df(1 To 5, 1 To 1) As Double 

For i = 1 To 5 
    df(i, 1) = 0 
    For j = 1 To 5 
     df(i, 1) = df(i, 1) + inverse_matrix(i, j) 
    Next j 
Next i 

discount_factors=df 

End Function 




Sub result() 

Dim swap_rates As Range 

inputs = Sheet1.Range("A7:B11").Value 

Sheet1.Range("C7:C11")=discount_factors(swap_rates) 

End Sub 

當運行它,它調試並跳轉到第一環路,參照我假定一個事實,即在輸入中使用swap_rates的尺寸發生了變化。我如何解決這個問題,以便我的子運行沒有這種併發症?

回答

0

我想你的代碼,只是有你已經改變,如果我的想法是正確的一件小事:

Sub result() 

    Dim swap_rates As Range 

    Set swap_rates = Sheet1.Range("A7:B11") 

    Sheet1.Range("C7:C11") = discount_factors(swap_rates) 

End Sub 

它爲我工作,但我不知道這是否是你想要的。 :)

相關問題