2017-03-10 37 views
0

我已经搜索和搜索,我无法弄清楚这一点。很感谢任何形式的帮助。VBA解算器每次粘贴结果

我正在运行一个基本的单纯形求解器。根据预测(H列)和薪金(G列),我希望得出最高数额$ A $ 4。我的约束是稳定的,但我无法循环,然后在某处粘贴结果。二进制解决方案在列A中,总共有6个结果为200.我在“优化程序1”中拥有所有这些数据,并且希望每次都将结果粘贴到“列表”中,从单元格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 

一旦我有它的“名单”,我有一个VLOOKUP将其移动到另一个工作表“线”,它给我的总和。第一个结果是最优化的,然后我想找到第二个最多,第三个最多等等。

我的另一个问题是我如何使基于单元的我(我循环的时间)?如果可能,我希望能够改变这一点。

希望有人可以提供帮助。这是我第一次尝试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