首页 > 解决方案 > Excel/VBA - 在求解器循环中更新 SUMPRODUCT(和其他)选择器

问题描述

我正在 Excel 中编写一个程序,该程序试图最大化一组值的总和,通过将变量 X(其值与每个被求和的值相关联)限制在特定阈值下。它必须对 66 个数据集(跨 66 列)执行此操作。

我不太明白如何将列偏移应用到SUMPRODUCT我在 VBA 提示或 Solver 选择中看到的。基本上,我需要了解如何在 VBA 中编写代码,以便在每次迭代时将选择向右偏移SUMPRODUCT一行。我需要 VBA 进行每次迭代的解释性图片。我在向右迭代 Solver 选择单元格时也有类似的问题,我不太了解所需的语法。例如: SolverAdd CellRef:="$C$28:$C$38",下一次迭代将被解释为SolverAdd CellRed:="$D$28:$D$28",依此类推。

到目前为止,我的代码看起来像这样!我知道我需要使用 'i' 将迭代添加到包含 的行中SUMPRODUCT,但是我无法解释SUMPRODUCT括号内的所有内容所指的内容,以及在哪里添加“水平加一”偏移量。

如果我忘记在此处包含任何明显的内容,请告诉我 :)

提前致谢,

保罗

For i = 0 To 66 ' PesticideMacro Macro '

    SolverReset

    Range("N5").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMPRODUCT(RC[-4]:R[10]C[-4],R[23]C[-11]:R[33]C[-11])"
    Range("O5").Select
    ActiveCell.FormulaR1C1 = _
       "=SUMPRODUCT(R[41]C[-12]:R[51]C[-12],R[23]C[-12]:R[33]C[-12])/SUMPRODUCT(RC[-5]:R[10]C[-5],R[23]C[-12]:R[33]C[-12])*1000000"
    Range("C27").Offset(0, i).Select
    Selection.Copy
    Range("P5").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    SolverAdd CellRef:="$C$28:$C$38", Relation:=5
    SolverAdd CellRef:="$O$5", Relation:=1, FormulaText:="$P$5"
    SolverOk SetCell:="$N$5", MaxMinVal:=1, ValueOf:=0, ByChange:="$C$28:$C$38", _
     Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve (True)
    SolverSolve userFinish:=True
    SolverFinish KeepFinal:=1

    Next i

End Sub

标签: excelvba

解决方案


推荐阅读