2016-08-09 3 views
0

Я написал код, который предназначен для расчета дисперсии растущего портфеля и расчета дисперсии 5000 раз для каждого элемента, включенного в портфель. Код работает так, как должен, и проблем нет.VBA: Передача значений на разные листы

Где я немного обеспокоен тем, что существует 6 различных матриц соизбрания, и код должен работать на каждом из них.

Я включил код в a для каждого цикла, чтобы выбрать и использовать 6 различных матриц совпадений, и он должен работать.

Однако я хотел бы, чтобы выход (дисперсия портфеля) размещался в 6 разных заранее определенных рабочих листах и ​​не был таким же, как в данный момент.

Моя первая мысль состояла в том, чтобы использовать массив, чтобы зацикливать, хотя каждый из 6 новых листов, но я не знаю, как его реализовать.

Я был бы очень признателен за любые рекомендации.

Код выглядит следующим образом:

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

Спасибо Робин, у меня было немного проблемы с получением кода в правом –

ответ

1

Пожалуйста, попробуйте ниже

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

Как я должен включить его в коде выше? Поскольку вывод из KVM1D первого элемента в первом массиве должен быть помещен в output1, который будет первым элементом во втором массиве (тот, который вы назначаете) –

+0

Извините, я просто пытался дать вам итерацию массива. Не могли бы вы сообщить мне, если 'Worksheets (« Kovarians »)' является вашим листом вывода, который вы хотите отправить. – Siva

+0

Что такое мое понимание 'Worksheets (« KVM1D »)' должно перейти в 'Worksheets (" Kovar1D ")' , 'Worksheets (" KVM2D ")' должны перейти в 'Worksheets (« Kovar2D »)' ... Я в порядке? – Siva

Смежные вопросы