【问题标题】:Looping A solver calculation by column按列循环求解器计算
【发布时间】:2016-06-22 19:57:24
【问题描述】:

我刚开始使用 VBA,我正在尝试设置求解器计算在多年范围内完成的位置,一个接一个。这是1年的简单代码。我如何对其进行编程以告诉它为一系列列执行此操作,例如从 $I$96 到 AP$96,一个接一个?非常感激。

    SolverOk SetCell:="$i$96", MaxMinVal:=3, ValueOf:=0, ByChange:="$i$72", Engine _
    :=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$i$96", MaxMinVal:=3, ValueOf:=0, ByChange:="$i$72", Engine _
    :=1, EngineDesc:="GRG Nonlinear"
SolverSolve userFinish = False


End Sub

【问题讨论】:

  • 使用For each cel in Range("I96:AP96") 构造查看For ... Next Loops,其中cel 是变量Dim cel as Range

标签: excel loops solver vba


【解决方案1】:

如果你想在给定范围内执行这段代码:

  1. 将您的代码片段定义为接收“setcell”和“bychange”作为范围的函数(如果“bychange”从未改变,您可以在函数中硬定义并将其从参数中删除)

    Public Sub Solver(byval cell as range, byval change as range)
        SolverOk SetCell:=cell, MaxMinVal:=3, ValueOf:=0, ByChange:=change, Engine:=1, EngineDesc:="GRG Nonlinear"
        SolverSolve userFinish = False
    End sub
    
  2. 定义您要计算的范围并为范围内的每个单元格运行此函数

    dim cell as range, rng as range
    set rng = Range("I96:AP96")    ' You should need to set range with Worksheet(<sheet>).Range()
    for each cell in rng
        call Solver(cell, Range("I72"))
    next
    

【讨论】:

    【解决方案2】:

    您可以使用for循环,然后通过单元格函数和Address方法生成地址字符串:

    Dim i As Integer
    For i = 9 To 42
        s1 = Cells(96, i).Address(RowAbsolute:=True, ColumnAbsolute:=True)
        s2 = Cells(72, i).Address(RowAbsolute:=True, ColumnAbsolute:=True)
        SolverOk SetCell:=s1, MaxMinVal:=3, ValueOf:=0, ByChange:=s2, Engine _
            :=1, EngineDesc:="GRG Nonlinear"
        SolverOk SetCell:=s1, MaxMinVal:=3, ValueOf:=0, ByChange:=s2, Engine _
            :=1, EngineDesc:="GRG Nonlinear"
        SolverSolve userFinish = False
    Next i
    

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多