2016-05-29 4 views
0

関数の計算はループで実装され、最後に関数はループによって実現される配列と等しく設定されます。関数は正常に動作します。しかし、配列を返すためにサブを書くとき(そして入力を再び範囲として定義するとき)、以前はループ内の関数で入力が使用されていたので、サブがそれを上書きしていると見なすのでエラーがあります。ループ内の関数入力の再利用の複雑さを避けるには、ループ内に自己記述関数を呼び出すときに、サブ関数を呼び出すときに、どのようにするのですか?

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 

私はそれを実行すると、それはデバッグおよびIが想定入力に使用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 

それは私のために働いていますが、それはあなたが欲しいものだ場合、私は知りません。 :)

関連する問題