[英]I need to automate Excel solver by using Macro . I have a problem in making "set objective value" a reference cell not a hard code
我正在使用求解器來構建有效的股票投資組合。 我必須完全自動化求解器。
我的問題是如何在求解器窗口槽中輸入“設置目標值”作為參考單元格而不是硬編碼值。 當然,每當我們更改輸入/股票選擇時,參考單元格應具有不同的值。
因此,為了使我的求解器模塊完全自動化,使這個“目標值”成為參考單元是至關重要的一步。
我是普通用戶。 請告訴我什么是我應該在宏 VBA 中添加和更改的 VBA 語句,以使我的宏自動且平穩地運行。
Sub Macro6()
'
' Macro6 Macro
' Automate Solver
'
' Keyboard Shortcut: Ctrl+Shift+K
'
ActiveWindow.SmallScroll Down:=-66
Range("A1").Select
SolverReset
SolverOk SetCell:="$D$39", MaxMinVal:=2, ValueOf:=0, ByChange:="$Y$14:$Y$33", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$Y$34", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$Y$14:$Y$33", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$D$39", MaxMinVal:=2, ValueOf:=0, ByChange:="$Y$14:$Y$33", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$D$39", MaxMinVal:=2, ValueOf:=0, ByChange:="$Y$14:$Y$33", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
SolverOk SetCell:="$D$39", MaxMinVal:=2, ValueOf:=0, ByChange:="$Y$14:$Y$33", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$D$38", MaxMinVal:=3, **ValueOf:=0.154**, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$D$38", MaxMinVal:=3, **ValueOf:=0.154**, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
SolverOk SetCell:="$D$38", MaxMinVal:=3, ValueOf:=0.154, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$D$38", MaxMinVal:=3, **ValueOf:=0.172**, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverOk SetCell:="$D$38", MaxMinVal:=3, **ValueOf:=0.172**, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
SolverOk SetCell:="$D$38", MaxMinVal:=3, ValueOf:=0.172, ByChange:= _
"$Y$14:$Y$33", Engine:=1, EngineDesc:="GRG Nonlinear"
End Sub
上面的粗體值 0.154 和 0.172 需要替換為單元格引用而不是硬代碼。 例如,我需要將 0.154 替換為“ ValueOf:=target1並將 0.172 替換為“ ValueOf:=target2 ” ....等。請建議。
聲明一個變量,給它一個值,然后在您當前使用硬編碼值的地方使用它。 那是:
Dim TargetValue As Double
...
TargetValue = 0.514
SolverOk SetCell:="$D$39", MaxMinVal:=3, ValueOf:=TargetValue, ByChange:="$Y$14:$Y$33", _
Engine:=1, EngineDesc:="GRG Nonlinear"
或者您可以從單元格中獲取值,例如 A1:
TargetValue = Range("A1").Value
此外,您可以刪除許多重復的代碼行,使事情變得更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.