2016-05-29 2 views
0

Le calcul de la fonction est implémenté dans les boucles et à la fin, la fonction est définie égale au tableau obtenu par la boucle. La fonction fonctionne bien. Cependant, quand j'écris un sous pour retourner le tableau (et définir à nouveau l'entrée comme plage), il y a une erreur car précédemment dans la fonction dans les boucles, l'entrée est utilisée et je suppose que le sous voit qu'elle est écrasée.Dans un sous-marin, lorsque vous appelez une fonction auto-écrite qui inclut une boucle, comment éviter la complication de la réutilisation des entrées de fonction dans la boucle?

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 

Quand je lance, il permet de déboguer et saute à la première boucle, se référant au fait que les dimensions de swap_rates utilisées dans l'entrée a changé, je suppose. Comment puis-je résoudre ce problème afin que mon sous-fonctionne sans cette complication?

Répondre

0

J'ai essayé votre code et il y avait juste une petite chose que vous avez à changer si mes pensées sont correctes:

Sub result() 

    Dim swap_rates As Range 

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

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

End Sub 

Il travaille pour moi, mais je ne sais pas si c'est ce que vous voulez. :)