【问题标题】:Automate Solver with varying constraints range具有不同约束范围的自动化求解器
【发布时间】:2015-11-21 16:33:59
【问题描述】:

我想创建 VBA 以使用这些参数运行 Solver:

设定目标:G6

最小化

通过更改变量单元格:J6:J----

受限于:L6:L-- = N6:N--(例如:L6=N6 , L7=N7 , ...)

问题是变量和约束范围在我键入 ---- 和 -- 的地方有所不同。我知道变量单元格范围一直到单元格 N1 上的一个数字,而约束单元格范围一直到单元格 N3 上的一个数字。

我不知道如何创建 VBA,但我试过了(它不起作用):

  Sub SolverMacro()
Dim var
Dim var2
    var = Range("Sheet2!$N$1").Value
    var2 = Range("Sheet2!$N$3").Value
    SolverReset
    SolverAdd CellRef:=Range("L6", "L" & var2), Relation:=2, FormulaText:=Range("N1", "N" & var2)
    SolverOptions Assumenonneg:=True
    SolverOk SetCell:="$G$6", _
             MaxMinVal:=2, _
             ByChange:=Range("J6", "J" & var)
    SolverSolve userFinish:=True
End Sub

我怎样才能让它工作?

【问题讨论】:

  • 您是否尝试过录制宏,在其中手动设置求解器,然后查看是否可以复制?
  • 你好,马可。我试过了,但问题是变量和约束的最终范围。例如,我如何写 L6:L20,但数字 20 是对我工作表单元格的引用?例如, L6:L & var ,其中 var = Sheet1!N3。
  • 你能写下你的一些约束例子吗?我不确定你的意思。
  • 你能把Range("L6", "L" & var2)换成Range("L6:" & "L" & var2)吗?

标签: excel vba solver


【解决方案1】:

谢谢大家!我找到了答案,它现在正在工作。有效的代码是:


Sub SolverMacroX()
        SolverReset
        Dim x As Integer
        Dim Aux As Long
        Aux = Range("$L$3")
        For x = 6 To Aux
            SolverAdd CellRef:="L" & x, Relation:=2, FormulaText:=Range("N" & x)
        Next
            SolverOptions AssumeNonNeg:=True
            SolverOk SetCell:="$G$6", _
                     MaxMinVal:=2, _
                     ByChange:=Range("J6", "J" & Range("$J$3")), _
            SolverSolve userFinish:=True
        End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2018-05-03
    • 2017-08-18
    • 1970-01-01
    • 2013-01-18
    • 2017-11-28
    相关资源
    最近更新 更多