Microsoft Excel

Herbers Excel/VBA-Archiv

Dynamische Schleifen

Betrifft: Dynamische Schleifen von: Oliver
Geschrieben am: 15.10.2014 01:17:56

Hallo,
ich möchte gerne diese geschachtelten Schleifen dynamisch Programmieren. Leider ist mir dies _
noch nicht gelungen. Ich habe schon gelesen das man das Rekursiv machen kann. Hier mein alter Quellcode.

Sub Gitternetz(ByVal arr2)
    Dim k, m, n, j, i
    
    Worksheets("Alle-Anteile").Cells.Clear
    Worksheets("Alle-Anteile").Activate
    k = 0

    
    
    If UBound(arr2) = 4 Then
        For m = 0 To 1 Step 0.05
            For n = 0 To 1 Step 0.05
                For j = 0 To 1 Step 0.05
                    For i = 1 To 0 Step -0.05
                        If Round(i + j + n + m, 2) = 1 Then
                            Cells(k, 5) = Round(i + j + n + m, 2)
                            Cells(k, 4) = i
                            Cells(k, 3) = j
                            Cells(k, 2) = n
                            Cells(k, 1) = m
                            Cells(k, 6) = Sheets("RWE").Range("L18") * m _
                            + Sheets("EON").Range("L18") * n _
                            + Sheets("Commerzbank").Range("L18") * j _
                            + Sheets("DeutscheBank").Range("L18") * i
                            Cells(k, 7).FormulaArray = _
                            "=MMULT((A" & k & ":D" & k & "),MMULT(Kovarianzmatrix!B2:E5, _
TRANSPOSE(A" & k & ":D" & k & ")))"
                            Cells(k, 8) = Cells(k, 7) ^ 0.5
                            k = k + 1
                        End If
                    Next i
                Next j
            Next n
        Next m
    End If
End Sub
Hier ist mein Rekursiver Ansatz. Ich bekomme Zählschleifen in Spalten. Aber was ich eigentlich _
möchte ist jede Kombination der 4(m,n,j,i) die die Summe 1 ergeben.



Function schleifen(i)

    If i > 0 Then
            for k=0 to 1 Step 0.1
                 Cells(i,k)=k
        schleifen = (i + schleifen(i - 1))
    Else
        schleifen = 0
    End If

End Function

Ich hoffe das es jemanden gibt der mir Helfen kann.

  

Betrifft: AW: Dynamische Schleifen von: Luschi
Geschrieben am: 15.10.2014 05:02:13

Hallo Oliver,

nach dieser Schleifenstruktur gibt es genau 15 Ergebnisse für: m + n + j + i = 1

 m             n             j             i
-----------------------------------------------
 0             0             0,05          0,95 
 0             0             0,95          0,05 
 0             0,05          0             0,95 
 0             0,05          0,9           0,05 
 0             0,9           0,05          0,05 
 0             0,95          0             0,05 
 0,05          0             0             0,95 
 0,05          0             0,9           0,05 
 0,05          0,85          0,05          0,05 
 0,05          0,9           0             0,05 
 0,85          0,05          0,05          0,05 
 0,9           0             0,05          0,05 
 0,9           0,05          0             0,05 
 0,95          0             0             0,05
Es wird also nie diese Kombination geben:

0,25 0,25 0,25 0,25
Gruß von Luschi
aus klein-Paris

PS: Wenn dieser Befehl das 1. mal aufgerufen wird: Cells(k, 5) = Round(i + j + n + m, 2)
hat K immer noch den Wert '0' und bei Cells(0, 5) spielt der Compiler nicht mit.



  

Betrifft: AW: Dynamische Schleifen von: Oliver
Geschrieben am: 15.10.2014 16:02:39

Hallo Luschi,
danke für deine Antwort.

Erstmal muss k=1 sein, Sorry mein Fehler.
Dann entstehen 1540 Kombinationen die eins ergeben. Auch die mit 4 mal 0.25 .
Also das Funktioniert.
Aber wenn weitere Wertpapiere dazukommen, dann brauche ich pro Wertpapiere eine weitere schleife.
Darum bin ich auf eine Rekursion gestoßen. Die ich aber nicht für mein Problem Programmiert bekomme


  

Betrifft: AW: Dynamische Schleifen von: Oliver
Geschrieben am: 15.10.2014 13:30:37

Kann mir niemand Helfen?


 

Beiträge aus den Excel-Beispielen zum Thema "Dynamische Schleifen"