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

我试图为Solver设置一个300列的数据循环。 这是我迄今为止:

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个案例(build立完全一样)它将解决方程。 例如,要解决C列的代码将如下所示:

 Sub SolverProp() SolverReset SolverOk SetCell:="$C$20", MaxMinVal:=3, ValueOf:="$C$3", ByChange:="$C$28", _ Engine:=1, EngineDesc:="GRG Nonlinear" SolverSolve End Sub 

您可以使用Range对象的Address属性遍历所有300列。

首先,您需要3个variables来保存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 

希望这可以帮助!

我select了上述,因为它提供了一个工作的解决scheme。 只是为了增加它,我不得不修改模型,因为看起来ValueOf属性不会接受范围作为input,我不得不重写我的模块,以满足条件时返回0。 上述答案的迭代部分是好的,我已经接受这个答案。