2016-08-09 30 views
0

Ich habe einen Code geschrieben, der die Varianz eines wachsenden Portfolios berechnen und die Varianz 5000 Mal für jedes im Portfolio enthaltene Element berechnen soll. Der Code funktioniert wie es sollte und kein Problem.VBA: Werte an verschiedene Blätter übergeben

Wo ich ein wenig beunruhigt bin, ist, dass es 6 verschiedene Kovarianzmatrizen gibt und der Code auf jedem von ihnen laufen sollte.

Ich habe den Code in eine für jede Schleife enthalten, um die 6 verschiedenen Kovarianzmatrizen auszuwählen und zu verwenden, und es sollte funktionieren.

Ich möchte jedoch die Ausgabe (die Varianz des Portfolios) in 6 verschiedenen vordefinierten Arbeitsblättern platziert werden und nicht das gleiche wie es im Moment der Fall ist.

Mein erster Gedanke war, ein Array zu verwenden, um jedes der 6 neuen Arbeitsblätter zu durchlaufen, aber ich weiß nicht, wie man es implementiert.

Ich würde jede Anleitung sehr schätzen.

Der Code ist wie folgt:

Sub kovariansmatrice() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

'Dim Var As Long 
Dim k, j As Integer 
Dim Random As Double 
Dim i As Integer 
Dim Fifth As Double 
Dim varians As Variant 
Dim Worksheet As Variant 
Dim Worksheets As Variant 
Dim outputs As Variant 

Worksheets = Array("KVM1D", "KVM2D", "KVM3D", "KVM1M", "KVM2M", "KVM3M") 
outputs = Array("Kovar1D", "Kovar2D", "Kovar3D", "Kovar1M", "Kovar2M", "Kovar3M") 

For Each Worksheet In Worksheets 

    For k = 100 To 150 Step 5 
     Cells(2, 496) = k 

      For j = 1 To 5000 
       For i = 1 To 494 
        Randomize 
        Random = Rnd() 
        Worksheets("Kovarians").Cells(3, i).Value = Random 
       Next i 

       Fifth = WorksheetFunction.Large(Sheets("Kovarians").Range("A3:BHK3"), k) 
       Worksheets("Kovarians").Cells(5, 1).Value = Fifth 
       varians = Application.MMult(Application.MMult(Sheets("Kovarians").Range("A2:BHK2"), Sheets("Kovarians").Range("B11:BHL1581")), Application.Transpose(Sheets("Kovarians").Range("A2:BHK2"))) 
       Worksheets("Kovarians").Cells(5, 3).Value = varians 

       Calculate 

       Sheets("Sheet1").Cells(j, k) = Sheets("Kovarians").Cells(5, 3) 

      Next j 
    Next k 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

Next Worksheet 

End Sub 
+0

Sie Robin Dank, ich hatte ein wenig Mühe, den Code in der rechten –

Antwort

1

Bitte versuchen Sie die unten

Sub kovariansmatrice() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

'Dim Var As Long 
Dim k, j As Integer 
Dim Random As Double 
Dim i As Integer 
Dim Fifth As Double 
Dim varians As Variant 
Dim Worksheet As Variant 
Dim Worksheets As Variant 
Dim outputs As Variant 

Worksheets = Array("KVM1D", "KVM2D", "KVM3D", "KVM1M", "KVM2M", "KVM3M") 
outputs = Array("Kovar1D", "Kovar2D", "Kovar3D", "Kovar1M", "Kovar2M", "Kovar3M") 

Dim indexVal As Integer 
indexVal = 0 

For Each Worksheet In Worksheets 

    For k = 100 To 150 Step 5 
     Cells(2, 496) = k 

      For j = 1 To 5000 
       For i = 1 To 494 
        Randomize 
        Random = Rnd() 
        Worksheets(outputs(indexVal)).Cells(3, i).Value = Random 
       Next i 

       Fifth = WorksheetFunction.Large(Sheets(outputs(indexVal)).Range("A3:BHK3"), k) 
       Worksheets(outputs(indexVal)).Cells(5, 1).Value = Fifth 
       varians = Application.MMult(Application.MMult(Sheets(outputs(indexVal)).Range("A2:BHK2"), Sheets(outputs(indexVal)).Range("B11:BHL1581")), Application.Transpose(Sheets(outputs(indexVal)).Range("A2:BHK2"))) 
       Worksheets(outputs(indexVal)).Cells(5, 3).Value = varians 

       Calculate 

       Sheets("Sheet1").Cells(j, k) = Sheets(outputs(indexVal)).Cells(5, 3) 

      Next j 
    Next k 
indexVal = indexVal + 1 
    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

Next Worksheet 

End Sub 
+0

bekommen Wie soll ich es im Code enthalten über? Da die Ausgabe von KVM1D das erste Element im ersten Array sollte in output1 platziert werden, die das erste Element im zweiten Array wäre (das, was Sie beabsichtigen) –

+0

Sorry, ich habe nur versucht, Ihnen die Array-Iteration. Können Sie bitte lassen Sie mich wissen, wenn 'Arbeitsblätter (" Kovarians ")' ist Ihr Ausgabeblatt, dass Sie die Details senden möchten – Siva

+0

Was mein Verständnis ist 'Worksheets (" KVM1D ")' sollte zu 'Arbeitsblätter (" Kovar1D ")' gehen , 'Arbeitsblätter (" KVM2D ")" sollte zu 'Arbeitsblättern gehen (" Kovar2D ")" ... Bin ich in meinem Verständnis richtig? – Siva