首页 > 解决方案 > 循环求解器宏

问题描述

我正在尝试遍历一长串行,以优化模型 J 列中的“最低成本”解决方案。
C、D、E 和 F 列中有四个变量,从第 9 行到第 50 行以及一些约束。

通常对 VBA 来说相当新,但最初的单行求解器代码如下所示,基本上需要继续重复该过程,然后通过更改变量 C10 - F10 求解 J10,然后移至第 11 行等。

任何开始循环过程的指针将不胜感激!

干杯!

Sub Macro11()
SolverOk SetCell:="$J$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$9:$F$9", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$C$9", Relation:=1, FormulaText:="23"
SolverAdd CellRef:="$D$9", Relation:=1, FormulaText:="23"
SolverOk SetCell:="$J$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$9:$F$9", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$J$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$9:$F$9", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
SolverOk SetCell:="$J$9", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$9:$F$9", _
        Engine:=1, EngineDesc:="GRG Nonlinear"

End Sub

标签: excelvbasolver

解决方案


输入由表示范围的字符串定义,因此通过与循环变量连接来创建范围字符串:

Sub Macro11()
    Dim iRow As Integer

    For iRow = 9 To 50
        SolverOk SetCell:="$J" & iRow, MaxMinVal:=2, ValueOf:=0, ByChange:="$C" & iRow & ":$F" & iRow, _
            Engine:=1, EngineDesc:="GRG Nonlinear"
        SolverAdd CellRef:="$C" & iRow, Relation:=1, FormulaText:="23"
        SolverAdd CellRef:="$D" & iRow, Relation:=1, FormulaText:="23"
        SolverOk SetCell:="$J" & iRow, MaxMinVal:=2, ValueOf:=0, ByChange:="$C" & iRow & ":$F" & iRow, _
            Engine:=1, EngineDesc:="GRG Nonlinear"
        SolverOk SetCell:="$J" & iRow, MaxMinVal:=2, ValueOf:=0, ByChange:="$C" & iRow & ":$F" & iRow, _
            Engine:=1, EngineDesc:="GRG Nonlinear"
        SolverSolve
        SolverOk SetCell:="$J" & iRow, MaxMinVal:=2, ValueOf:=0, ByChange:="$C" & iRow & ":$F" & iRow, _
                Engine:=1, EngineDesc:="GRG Nonlinear"
    Next iRow
End Sub

推荐阅读