Страницы: 1
RSS
Динамическое значение при поиске решения в VBA
 
Добрый день всем!

Прошу помощи вот в таком вопросе - при использовании инструмента "Поиск решения в VBA", как можно сделать динамическое целевое значение? Чтобы не писать его руками, а сделать ссылку на ячейку

При таком коде - выдает ошибку модели"
Код
SolverReset
SolverOk SetCell:="$J$65", MaxMinVal:=3, ValueOf:="$J$53", ByChange:="$J$58:$J$63", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$J$58", Relation:=1, FormulaText:="$O$44"
    SolverAdd CellRef:="$J$58", Relation:=3, FormulaText:="$N$44"
    SolverAdd CellRef:="$J$59", Relation:=1, FormulaText:="$O$45"
    SolverAdd CellRef:="$J$59", Relation:=3, FormulaText:="$N$45"
    SolverAdd CellRef:="$J$60", Relation:=1, FormulaText:="$O$46"
    SolverAdd CellRef:="$J$60", Relation:=3, FormulaText:="$N$46"
    SolverAdd CellRef:="$J$61", Relation:=1, FormulaText:="$O$47"
    SolverAdd CellRef:="$J$61", Relation:=3, FormulaText:="$N$47"
    SolverAdd CellRef:="$J$62", Relation:=1, FormulaText:="$O$48"
    SolverAdd CellRef:="$J$62", Relation:=3, FormulaText:="$N$48"
    SolverAdd CellRef:="$J$63", Relation:=1, FormulaText:="$O$49"
    SolverAdd CellRef:="$J$63", Relation:=3, FormulaText:="$N$49"
    SolverOk SetCell:="$J$65", MaxMinVal:=3, ValueOf:="$J$53", ByChange:="$J$58:$J$63", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve


Спасибо!
 
Может как-то так
Код
For I = 58 To 63
  SolverOk SetCell:="$J$65", MaxMinVal:=3, ValueOf:="$J$53", ByChange:="$J$58:$J$63", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$J$" & I, Relation:=1, FormulaText:="$O$" & I + 14
    SolverAdd CellRef:="$J$" & I, Relation:=3, FormulaText:="$N$" & I + 14
Next
Согласие есть продукт при полном непротивлении сторон
 
Sanja,  всеравно выдает ошибку модели
Если вместо ValueOf=$J$53 поставить ValueOf=775.33828(или любое другое число) - то модель работает

Но в качестве сокращения строк кода ваш вариант очень пригодится! Спасибо и на этом)

Суть вопроса именно в том, чтобы вместо конкретного значения, каждый раз вводимого ручками в ValueOf - поставить ссылку на ячейку где это самое значение будет храниться и при этом работал поиск решений...
 
Разобрался)
Вот так выглядит окончательный код
Код
SolverReset
J = Range("J53").Value
Select Case July
Case Is = 0
For I = 58 To 63
  SolverOk SetCell:="$J$65", MaxMinVal:=3, ValueOf:=J, ByChange:="$J$58:$J$63", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$J$" & I, Relation:=1, FormulaText:="$O$" & I - 14
    SolverAdd CellRef:="$J$" & I, Relation:=3, FormulaText:="$N$" & I - 14
Next
    SolverSolve
Изменено: RENIK2095 - 16.08.2019 14:59:41
 
J лишняя
Код
For I = 58 To 63
  SolverOk SetCell:="$J$65", MaxMinVal:=3, ValueOf:=Range("J53").Value, _
    ByChange:="$J$58:$J$63", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$J$" & I, Relation:=1, FormulaText:="$O$" & I - 14
    SolverAdd CellRef:="$J$" & I, Relation:=3, FormulaText:="$N$" & I - 14
Next
Согласие есть продукт при полном непротивлении сторон
 
Sanja, О, а так я не попробовал) Пробовал "Range("J53").Value", подумал что не заработает - убрать кавычки не догадался

Спасибо)
Страницы: 1
Наверх