Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Do Loop Schleife zum optimieren einer Spalte
#1
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!Smile


Angehängte Dateien
.xlsm   Testtabelle_fuer_Forum.xlsm (Größe: 530,29 KB / Downloads: 8)
Antwortento top
#2
Hallöchen,

zuerst mal passt so etwas nicht:

"$AQ$ O + i"

korrekt wäre

"$AQ$" & O + i
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste