簡體   English   中英

我需要使用 Macro 自動化 Excel 求解器。 我在使“設置目標值”成為參考單元格而不是硬代碼時遇到問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM