创建一个Excel Solver宏,该宏针对多个行循环目标,变量单元格和约束

时间:2018-07-17 07:39:32

标签: excel vba excel-vba

有一些我想对使用求解器进行非线性回归的数据。这是我第一次使用vba(实际上是任何一种编程)。我已经尝试过尝试使用各种代码组合(从答案到问题),但是对于我一生来说,除了第一行之外,我无法让宏更改任何事情。

我的目标像元(K6),我的变量像元(N6)和约束(N6> = 0)每次都需要加一。 {例如,下一个值分别为K7,N7和N7> = 0。}我有356行数据。

这是我记录的宏,外加循环,求解器完成和求解器重置。我省略了所有无效的内容。如何获得三个部分(目标单元格,变量,约束)以抵消?

Sub solversolo()

For i = 0 To 356
'
' solversolo Macro
'

'
    SolverReset
    SolverOk SetCell:="$K$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$6", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$N$6", Relation:=3, FormulaText:="0"
    SolverOk SetCell:="$K$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$6", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverOptions MaxTime:=0, Iterations:=100000, Precision:=0.000001, Convergence _
        :=0.0001, StepThru:=False, Scaling:=True, AssumeNonNeg:=True, Derivatives:=1
    SolverOptions PopulationSize:=400, RandomSeed:=0, MutationRate:=0.075, Multistart _
        :=False, RequireBounds:=True, MaxSubproblems:=0, MaxIntegerSols:=0, _
        IntTolerance:=1, SolveWithout:=False, MaxTimeNoImp:=30
    SolverOk SetCell:="$K$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$6", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:="$K$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$N$6", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverSolve userfinish:=True
    solverfinish keepfinal:=1

    Next i
End Sub

1 个答案:

答案 0 :(得分:1)

我建议使用这种构造-例如:

SolverOk SetCell:="$K$6",

应该是这样

SolverOk SetCell:="$K$" & i,

但是您可能想从1而不是0开始循环...

或者您可以这样做:

SolverOk SetCell:="$K$" & 6 + i