EXCEL规划求解自动化

2ledvvac  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(252)

我正在使用Excel规划求解来最小化基于4个变量的成本。
关键是,求解器可以解决一个目标单元格的时间,但我需要这样做的250个项目的多个供应商。我试图总结所有的价格,但求解器是有限的200个变量,它需要永远执行它。
我的问题是:如何使用宏自动化求解器?
我的数据组织如下:
价格:A至D列数量限制:E列数量:F至I栏需求(取决于数量):J列总价(最小化):K列
我尝试为1个项目获取以下宏代码:

SolverOk SetCell:="$K$13", MaxMinVal:=2, ValueOf:=0, ByChange:="$F$13:$I$13", _
    Engine:=2, EngineDesc:="Simplex LP"

SolverAdd CellRef:="$F$13:$I$13", Relation:=4, FormulaText:="integer"
SolverOk

SolverAdd CellRef:="$F$13:$I$13", Relation:=3, FormulaText:="0"
SolverOk

SolverAdd CellRef:="$J$13", Relation:=3, FormulaText:="$E$13"
SolverOk

SolverSolve

SolverOk

SolverDelete CellRef:="$F$13:$I$13", Relation:=4
SolverDelete CellRef:="$F$13:$I$13", Relation:=3, FormulaText:="0"
SolverDelete CellRef:="$J$13", Relation:=3, FormulaText:="$E$13"

End Sub

我需要你的帮助,自动从第7行到第257行的代码。
谢谢
David

9rnv2umw

9rnv2umw1#

我认为你真正想问的问题是如何在vba中创建一个循环。对于初学者来说,“for循环”是最简单的。开始你的代码:

for i = 7 to 257

把你想重复的代码放在这里......你想改变的东西,引用“i”
例如,此行不会引用第13行,因为它在这里:求解器添加单元格引用:="$F$13:$I$13”,关系:=4,公式文本:=“整数”
而是指这里所示的第i行

SolverAdd CellRef:="$F$" & i & ":$I$" & i, Relation:=4, FormulaText:="integer"

以此类推。对你想改变的东西从头到尾都这样做。然后用这个结束你的循环:

Next

如果有帮助就告诉我。

hgtggwj0

hgtggwj02#

For row = 1 To 10
    For col = 1 To 7
    SolverReset
    SolverOptions Precision:=0.001
    SolverOK SetCell:="INDEX(ObjFn," & row & "," & col & ")", _
    MaxMinVal:=3, _
    ValueOf:=0, _
    ByChange:="INDEX(ByChanging," & row & "," & col & ")"
    solverResult = Application.Run("SolverSolve", True)

    Next col
Next row

这里ObjFn是excel上的一个命名范围,ByChanging是另一个命名范围。

相关问题