2017-03-10 4 views
0

Ich habe gesucht und gesucht und ich kann das nicht herausfinden. Jede Hilfe wird sehr geschätzt.VBA Solver Einfügen von Ergebnissen jedes Mal

Ich verwende einen einfachen Simplex-Löser. Ich suche nach der Höchstzahl $ A $ 4, basierend auf Projektionen (Spalte H) und Gehalt (Spalte G). Meine Constraints sind solide, aber ich kann es nicht zum Schleifen bringen und dann die Ergebnisse irgendwo einfügen. Die binäre Lösung ist in Spalte A, insgesamt 6 Ergebnisse von 200. Ich habe alle diese Daten in "Optimizer 1" und möchte das Ergebnis jedes Mal in "Liste" einfügen, beginnend in Zelle A1-A6, dann die zweite Schleife wäre A7-A13 usw. Ich möchte das 20 Mal machen.

Der Code ich benutze jetzt:

For i = 0 To 20 Step 1 
Application.Calculation = xlAutomatic 
Calculate 
SolverReset 
SolverAdd CellRef:="$A$2:$A$201", Relation:=2, FormulaText:="binary" 
SolverAdd CellRef:="$X$4", Relation:=2, FormulaText:="$X$6" 
SolverAdd CellRef:="$Z$4", Relation:=1, FormulaText:="$Z$6" 
SolverAdd CellRef:="$AE$3", Relation:=2, FormulaText:="$AF$3" 
SolverAdd CellRef:="$AA$4", Relation:=1, FormulaText:=Worksheets("Optimizer 1").Range("$AA8").Offset(i, 0).Address 
SolverOk SetCell:="$AA$4", MaxMinVal:=1, ValueOf:=0, ByChange:="$A$2:$A$201", _ 
    Engine:=2, EngineDesc:="Simplex LP" 
SolverSolve 
SolverSolve (True) 
SolverFinish KeepFinal:=1 

If i = 0 Then 
Worksheets("List").Range("A1").Resize(6, 1).Value = _ 
    Worksheets("Optimizer 1").Range("b2:B201").Value 

Else 

Worksheets("List").Range("a1").End(xlUp).Offset(6).Resize(200, 1).Value = _ 
    Worksheets("Optimizer 1").Range("b2:b201").Value 
End If 
Next i 

End Sub 

Einmal habe ich es in der „Liste“ habe, habe ich eine vlookup, um es auf ein anderes Blatt zu bewegen „Lines“, wo es mir die Summe gibt . Das erste Ergebnis ist das optimalste, und dann möchte ich das zweitbeste, dritthäufigste usw. finden.

Die andere Frage, die ich habe, ist wie kann ich machen ich (die Zeiten, die ich Schleife) basierend auf einer Zelle? Ich möchte das ändern können, wenn es möglich ist.

Hoffentlich kann jemand helfen. Dies ist das erste Mal, dass ich VBA versuche. Vielen Dank!

Antwort

0

Nicht sicher, ob Sie 6 Ergebnisse oder 200 wünschen. Wie auch immer, hier ist eine Möglichkeit, die letzte Zeile in Spalte A zu finden und die nächste Schleife in der nächsten leeren Zeile zu starten.

Dim List_Current_row As Long 
List_Current_row = Worksheets("List").Cells(Rows.Count, 1).End(xlUp).Row + 1 

If i = 0 Then 
Worksheets("List").Cells(List_Current_row, 1).Resize(6, 1).Value = _ 
Worksheets("Optimizer 1").Range("b2:B201").Value 

Else 

Worksheets("List").Cells(List_Current_row,1).Resize(200, 1).Value = _ 
Worksheets("Optimizer 1").Range("b2:b201").Value 
End If 
Next i 
Verwandte Themen