2012-04-08 34 views
1

ここは新しいです。 :)私は最初に検索しようとしましたが、探しているものを正確に見つけることができなかったので、ここに行きます。ワークシートにVBAを使って一連の共分散行列を作成したい

私は、ExcelのワークシートにN個の資産の日付とTの1日のリターンで構成されるセットを持っています。私がやりたいことは、過去x日のすべての資産のリターンに基づいて、毎月の初めにN * Nの共分散行列を作成することです。

私は共分散行列を作成するためにここにこのコードを書いていますが、毎月の初めにExcel/VBAをいくつか自動的に作成する方法はわかりません。あなたの誰かが私を助けることができれば素晴らしい。 :)

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 

答えて

1

これを試してください:あなたはこれを行うことがしたいときに今、(以前のように)あなたのデータの参照範囲で関数を呼び出す

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 

とターゲットの場所への参照範囲コヴァールが示されています。

+0

ありがとうございました! :)私はそれを実装するいくつかの問題を抱えていますが、私はあなたが行くところを参照してください。うまくいけば、私はそれが私が望むことをするためにファッジすることができます。とても有難い! – L1meta

関連する問題