2017-03-10 2 views
0

私は検索して検索しましたが、これはわかりません。どんな助力も非常に感謝しています。VBAソルバーは毎回結果を貼り付けます

私は基本的なシンプレックスソルバーを実行しています。私は投影(列H)と給料(列G)に基づいて最大数$ A $ 4を考えています。私の制約はしっかりしていますが、ループさせて結果をどこかに貼り付けることができません。バイナリ解は列Aにあり、合計で6の結果が200個になります。このデータはすべて「オプティマイザ1」にあり、その結果を「リスト」に貼り付けたい場合は、セルA1-A6から開始します。 2番目のループはA7-A13などとなります。これを20回実行したいと思います。

私が今使っているコードは次のとおりです。

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 

私は「一覧」にそれを持っていたら、私はそれが私の合計を与える別のシート「行」、に移動するためにVLOOKUPを持っています。最初の結果が最も最適で、次に2番目に多いもの、3番目に多いものなどを見つけたいと思います。

もう1つの質問は、どのようにしてセルに基づいてiを作ることができますか?私は可能な限りそれを変更できるようにしたい。

誰かが助けてくれることを願っています。これは初めてのVBAの試みです。ありがとうございました!

答えて

0

結果が6か200かどうかわかりません。どちらの方法でも、列Aの最後の行を見つけて次の空の行で次のループを開始する方法があります。

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 
関連する問題