Excel VBA を使用して相関行列を作成する最良の方法は何ですか? 私のデータには 45 列 (最終的に変更される可能性があります) と 12000 行 (同様に変更される可能性があります) があります。シートで関数を使用するだけでしたがcorrel、前述のように、列と行は時間とともに変化する可能性があります。
どんな助けでも大歓迎です!
Excel VBA を使用して相関行列を作成する最良の方法は何ですか? 私のデータには 45 列 (最終的に変更される可能性があります) と 12000 行 (同様に変更される可能性があります) があります。シートで関数を使用するだけでしたがcorrel、前述のように、列と行は時間とともに変化する可能性があります。
どんな助けでも大歓迎です!
 Application.Run "ATPVBAEN.XLAM!Mcorrel", ActiveSheet.Range("$C$3:$F$6"), _
    ActiveSheet.Range("$C$10"), "K", False //"K" might be "C"=column
これを実行するには、最初に Data Analysis Toolpack (パッケージ) を有効にする必要があります。これは、UI の [データ分析] タブ -> [相関行列] から使用できます。
ここ:
"$C$3:$F$6" - input (square matrix)
$C$10 - output cell
"K" (or "C") - group by columns
false - labels=no
Web で VBA Correlation Matrix Code を検索しましたが、実体のあるものは何も見つかりませんでした。自分でコーディングを行いましたが、美しくはありませんが、機能します。このコードは、最後のデータ系列の右側にマトリックスを作成します。
Sub CorrelationMatrix()
Dim y As Range
Dim z As Range
funds = Application.Workbooks("VBAcorrelation").Worksheets("Sheet1").Cells(1,       Columns.Count).End(xlToLeft).Column
rader = 0
For x = 1 To funds
        nyrad = Cells(Rows.Count, x).End(xlUp).Row
        If nyrad > rader Then
        rader = Cells(Rows.Count, x).End(xlUp).Row
    End If
Next x
p = 1
u = 2
For h = 1 To funds
For u = 1 To funds
        Set y = ActiveSheet.Range(Cells(2, h), Cells(rader, h))
        Set z = ActiveSheet.Range(Cells(2, u), Cells(rader, u))
  Correl = WorksheetFunction.Correl(y, z)
 Worksheets("Sheet1").Cells(h + 1, funds + u + 3).Select
 ActiveCell = Correl
 Next u
 Next h
MsgBox "Done with Matrix"
End Sub
それはうまくいきます:
Option base 1  
      Function MCorrelation(rango As Range) As Variant
        Dim x As Variant, y As Variant, s As Integer, t As Integer, c() As Variant
        ReDim c(rango.Columns.Count, rango.Columns.Count)
        For i = 1 To rango.Columns.Count Step 1
         For j = 1 To i Step 1
        c(i, j) = Application.Correl(Application.Index(rango, , i), Application.Index(rango, , j))
         Next j
        Next i
         MCorrelation = c
        End Function