2012-04-08 9 views
1

Ich bin neu hier. :) Ich habe zuerst versucht zu suchen, konnte aber nicht genau das finden, wonach ich gesucht habe.Ich möchte eine Reihe von Kovarianzmatrizen in meinem Arbeitsblatt über VBA

Ich habe ein Set, bestehend aus einer Spalte von Daten und T tägliche Renditen für N Assets in meinem Excel-Arbeitsblatt. Was ich tun möchte, ist eine N * N Kovarianzmatrix für den Beginn eines jeden Monats basierend auf den Renditen aller Vermögenswerte für die vergangenen x Tage zu erstellen.

Ich habe diesen Code hier zum Erstellen einer Kovarianz-Matrix, aber ich weiß nicht, wie man Excel/VBA mehrere von ihnen automatisch für den Beginn eines jeden Monats erstellen. Super, wenn einer von euch mir helfen kann. :)

Function VarCovar(Rng As range) As Variant 
Dim i As Integer 
Dim j As Integer 
Dim numcols As Integer 

numcols = Rng.Columns.Count 
Dim matrix() As Double 
ReDim matrix(numcols - 1, numcols - 1) 
For i = 1 To numcols 
    For j = 1 To numcols 
     matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(Rng.Columns(i), Rng.Columns(j)) 
    Next j 
Next i 

VarCovar = matrix 

End Function 

Antwort

1

Try this:

Sub VarCovar(rng as Range, target as Range) 

    Dim i As Integer 
    Dim j As Integer 
    Dim numcols As Integer 

    numcols = Rng.Columns.Count 
    Dim matrix() As Variant 
    ReDim matrix(1 to numcols, 1 to numcols) 
    For i = 1 To numcols 
     For j = 1 To numcols 
      matrix(i, j) = Application.WorksheetFunction.Covar(Rng.Columns(i), Rng.Columns(j)) 
     Next j 
    Next i 

    Set target = target.Resize(numcols,numcols) 
    target.Value = matrix 
End Sub 

Nun, wenn Sie dies wollen getan werden, rufen Sie die Funktion mit einem Referenzbereich für Ihre Daten (wie bisher) und ein Referenzbereich zum Zielort wo die Covar gezeigt wird.

+0

Vielen Dank für Ihre Hilfe! :) Ich habe einige Probleme bei der Implementierung, aber ich sehe, wohin du gehst. Hoffentlich kann ich es täuschen, um zu tun, was ich will. Sehr geschätzt! – L1meta