Clever-Excel-Forum

Normale Version: Do Loop Schleife zum optimieren einer Spalte
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich versuche gerade eine Schleife so zu dynamisieren, dass ich sie auch für andere Tabellen anwenden kann. Hier einmal eine kurze Erklärung, wie die Schleife vorgehen soll:
Die Schleife soll in Spalte I ab Reihe O + i schauen, ob sich ein Wert in den Zellen befindet. Befindet sich ein Wert in einer Zelle, soll in dieser Reihe der Wert in Spalte AW mittels Solver minimiert werden. Dabei darf der Solver die Gewichte verändern (Spalten AP, AR und AT). Nebenbedingungen sind, dass die Werte in den Spalten AQ, AS und AU gleich groß sein sollen. Die Summe aus den drei Gewichten muss 1 ergeben (Spalte AV). Die Schleife soll so lange durchgeführt werden, bis in Spalte A keine Werte mehr in den Zellen stehen.

Ich habe schon einmal die Reihen bis 97 per Hand optimiert um zu zeigen, wie das Ergebnis aussehen soll. In Reihe 37 habe ich leider schlechte Daten, weshalb der Solver mir kein gutes Ergebnis liefern kann. In Reihe 97 liefert er mir das richtige Ergebnis. Lasse ich meinen Code durchlaufen, dann bleibt Reihe 117 unverändert – sprich wird gar nicht optimiert. Weiß jemand von euch woran das liegen könnte?

Schreibe ich den Code für nur eine Zelle (also ohne O + i sondern nur eine Zeilenzahl) um, dann funktioniert er. Daher dürften die Nebenbedingungen etc. kein Problem sein.
Die Beispieltabelle soll nur einmal zeigen, wie die eigentlichen Tabellen aufgebaut sind. Der Code soll für mehrere Mappen angewendet werden, weshalb ich diesen gerne dynamisch hätte.

Und hier noch der Code:

Sub DoLoop1_1_Erweitert
Dim i As Integer
Dim O As Integer
i = i + 1
O = Cells(6, 13)
 
Do
If Cells(O + i, 9) = "" Then
i = i + 1
 
ElseIf Cells(O + i, 9) <> 0 Then
 
SolverReset
    SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _
        "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$AQ$ O + i", Relation:=2, FormulaText:="$AS$ O + i"
    SolverAdd CellRef:="$AQ$ O + i", Relation:=2, FormulaText:="$AU$ O + i"
    SolverAdd CellRef:="$AS$ O + i", Relation:=2, FormulaText:="$AU$ O + i"
    SolverAdd CellRef:="$AV$ O + i", Relation:=2, FormulaText:="1"
    SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _
        "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:="$AW$ O + i", MaxMinVal:=2, ValueOf:=0, ByChange:= _
        "$AP$ O + i,$AR$ O + i,$AT$ O + i", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve 'userfinish:=True
    i = i + 1
 
End If
    Loop While Cells(O + i, 1) <> ""
   
End Sub


Vielen Dank schon einmal für eure Hilfe! :)
Hallöchen,

zuerst mal passt so etwas nicht:

"$AQ$ O + i"

korrekt wäre

"$AQ$" & O + i