0

我正在使用 Excel Solver 来最小化基于 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 行的代码。

谢谢

大卫

4

2 回答 2

0
 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 是另一个命名范围。

于 2014-01-09T22:35:27.653 回答
0

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

for i = 7 to 257

把你想重复的代码放在这里……你想改变的东西,参考“i”

例如,此行不会引用第 13 行,因为它在这里: SolverAdd CellRef:="$F$13:$I$13", Relation:=4, FormulaText:="integer"

而是指第 i 行,如此处所示

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

等等。为你想要改变的事情做这件事。并以此结束你的循环:

Next

让我知道这是否有帮助。

于 2013-10-10T13:39:33.230 回答