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の寸法が変化したことを参照して、第一のループにジャンプ。この問題を解決して、この問題がなくてもサブが実行されるようにするにはどうすればよいですか?