设置求解器循环以更改单元格引用、相邻列

setting solver loop to change cell references, adjacent columns

我正在尝试为二次优化编写一个宏。我的VBA技能非常有限,但是我手动使用求解器并录制了一个宏,我的代码目前是这样的:

Sub Macro2()
'
' Macro2 Macro
'

'
    SolverReset
    SolverAdd CellRef:="$C9:$C5", Relation:=3, FormulaText:="0"
    SolverAdd CellRef:="$C6", Relation:=2, FormulaText:="1"
    SolverOk SetCell:="$C4", MaxMinVal:=2, ValueOf:=0, ByChange:="$C9:$C5" _
    , Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1

End Sub

我想做的是创建一个求解器循环,以便下次单元格引用和目标单元格中​​的 C 列更改为 D 时,其他所有内容都将保持不变。我想对从 C 到 V 的 20 个相邻列执行此操作。将不胜感激任何帮助!

如果我在上面的评论中提出的假设是正确的,那么下面的代码可以满足您的需求 - 但是我无法测试所有代码,因为我没有求解器函数...见下文:

Public Sub sampleCode()
Dim targetWS As Worksheet
Dim colCounter As Long
Dim colAddress As String
Dim colLetter As String

Set targetWS = ThisWorkbook.Sheets(1)   'Make sure to replace sheet(1) with sheet(<your sheet name>)
For colCounter = 3 To 22    'Loop through columns C through V
    'Get the column letter you want to run solver on
    colAddress = Replace(targetWS.Range("A1")(1, colCounter).address, "$", "")
    colLetter = Left(colAddress, InStr(1, colAddress, "1") - 1)
    SolverReset
    'Run solver but with the references being set by using colLetter
    SolverAdd CellRef:=colLetter & "179:" & colLetter & "185", Relation:=3, FormulaText:="0"
    SolverAdd CellRef:=colLetter & "186", Relation:=2, FormulaText:="1"
    SolverOk SetCell:=colLetter & "174", MaxMinVal:=2, ValueOf:=0, ByChange:=colLetter & "179:" & colLetter & "185", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
Next
End Sub

希望这对您有所帮助, TheSilkCode