每次运行后复制并粘贴解算器结果

时间:2016-07-19 16:02:56

标签: excel-vba solver vba excel

我有一个sub使用Solver函数运行Solver 50次。但是,我试图在每次运行后复制并粘贴Solver结果。例如,在“优化”选项卡上,单元格范围E1:O13显示解算器结果,但每次运行结果都将覆盖在同一部分上。我想将单元格范围E1:E13复制到从单元格A1开始的另一个工作表调用“SolverResults”,比如第一次运行Solver的范围单元格A1:K13,然后将第二轮Solver复制并粘贴到单元格A16中: K28,等等。 对于复制和粘贴部分,我不知道如何使用循环,因此目前在SolverResults选项卡上,我只显示A1:K13上的一段数据,这是Solver完成运行50次并且F1 = 221。

任何人都知道如何使用循环逐节复制和粘贴结果?我对VBA很新,所以任何建议都表示赞赏!

    {Sub RRS()
For i = 0 To 50 Step 1
SolverReset
Range("F1") = 271 - i
    SolverOk SetCell:="$L$13", MaxMinVal:=3, ValueOf:=0.01, ByChange:="$F$4:$F$12" _
        , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverOptions MaxTime:=0, Iterations:=0, Precision:=0.001, Convergence:=0.0001 _
        , StepThru:=False, Scaling:=False, AssumeNonNeg:=True, Derivatives:=2
    SolverAdd CellRef:="$F$4:$F$12", Relation:=1, FormulaText:="$I$4:$I$12"
    SolverAdd CellRef:="$F$4:$F$12", Relation:=3, FormulaText:="$H$4:$H$12"
    SolverAdd CellRef:="$F$13", Relation:=2, FormulaText:="1"
    SolverSolve (True)
    SolverFinish KeepFinal:=1
    Worksheets("Optimization").Range("E1:O13").Copy Destination:=Worksheets("SolverResults").Range("A1")
Next i
End Sub
}

1 个答案:

答案 0 :(得分:0)

替换此行:

Worksheets("Optimization").Range("E1:O13").Copy Destination:=Worksheets("SolverResults").Range("A1")

有了这个

If i = 0 Then

    Worksheets("SolverResults").Range("A1").Resize(13,11).Value = _ 
        Worksheets("Optimization").Range("E1:O13").Value

Else

   Worksheets("SolverResults").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(13,11).Value = _ 
        Worksheets("Optimization").Range("E1:O13").Value

End If