我正在尝试为300列中保存的数据设置Solver循环。这就是我到目前为止所做的:
Sub SolverProp()
SolverReset
SolverOk SetCell:="$B$20", MaxMinVal:=3, ValueOf:="$B$3", ByChange:="$B$28", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
End Sub
此代码解决了我在B列中保存的数据所需的内容。它改变了B28,直到B20等于B3。 我试图让它循环,以便每300个案例(设置完全相同)它将解决方程式。例如,为了解决C列,代码看起来像这样:
Sub SolverProp()
SolverReset
SolverOk SetCell:="$C$20", MaxMinVal:=3, ValueOf:="$C$3", ByChange:="$C$28", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
End Sub
答案 0 :(得分:1)
您可以使用Range对象的Address属性遍历所有300列。
首先,您需要3个变量来保存SetCell,ValueOf和ByChange的位置。
Dim setCellRange as Range, valueOfRange as Range, byChangeRange as Range
Set setCellRange = ActiveSheet.Range("B20")
Set valueOfRange = ActiveSheet.Range("B3")
Set byChangeRange = ActiveSheet.Range("B28")
然后您可以使用以下循环遍历每一列。
Dim i as Long
For i = 1 to 300
SolverReset
SolverOk SetCell:=setCellRange.Address, MaxMinVal:=3, ValueOf:=valueOfRange.Address, ByChange:=byChangeRange.Address, _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
Set setCellRange = setCellRange.Cells(1, 2)
Set valueOfRange = valueOfRange.Cells(1, 2)
Set byChangeRange = byChangeRange.Cells(1, 2)
Next i
希望这有帮助!
答案 1 :(得分:0)
我选择了以上内容,因为它提供了一个有效的解决方案。只是添加它,我不得不修改模型,因为似乎ValueOf属性不接受范围作为输入,我必须重做我的模块,使其在满足条件时返回0。上述答案的迭代部分很好,我接受了这个答案。