VBA Excel解算器代码 - 按列循环

时间:2014-12-15 18:38:25

标签: excel vba solver

我正在尝试为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

2 个答案:

答案 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。上述答案的迭代部分很好,我接受了这个答案。