每次VBA解算器粘贴结果

时间:2017-03-10 22:38:19

标签: excel vba loops solver

我搜索过并搜索过,我无法弄清楚这一点。非常感谢任何帮助。

我正在运行一个基本的单纯形求解器。我希望根据预测(第H列)和工资(第G栏)得出最高数$ 4美元。我的约束是可靠的,但我不能让它循环,然后将结果粘贴到某处。二进制解决方案在A列中,总共有6个结果中的200个。我在" Optimizer 1"中拥有所有这些数据,并希望每次都将结果粘贴到" List&#34 ;,从Cell A1-A6开始,然后第二个循环将是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

一旦我在" List"中,我有一个vlookup将它移动到另一张表" Lines",它给了我总和。第一个结果是最优的,然后我想找到第二个,第三个等等。

我的另一个问题是如何根据细胞制作i(我循环的时间)?我希望能够在可能的情况下改变它。

希望有人可以提供帮助。这是我第一次尝试VBA。谢谢!

1 个答案:

答案 0 :(得分: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
相关问题