ソルバーを使用して単純なポートフォリオの最大リターンを見つけようとしています。ワークシートで Solver を直接使用すると適切に機能しますが、コマンドが VBA で設定されている場合は機能しません。代わりに (スクリーン グラブからわかるように) 制約の 1 つを無視します (T10 で計算された重みの合計が 1 になる必要があります)。興味深いことに、3 行目を次のように変更すると、問題なく動作します。
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"
または、「1」以外の整数。(他の制約も無視している可能性がありますが、これを確認することはできません)。テーブルは次のようになります。
そして私のコードは次のとおりです。
Sub FindRange()
SolverReset
SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("T9").Value = Range("T7").Value
End Sub
どんな提案でも大歓迎です!