VBA: SolverAdd игнорирует ограничения

Я пытаюсь настроить решатель для каждого запуска макроса, но, похоже, он игнорирует некоторые ограничения, но не все из них по какой-то причине.

SolverReset
SolverOk SetCell:="$N$15", MaxMinVal:=3, ValueOf:=0, ByChange:=Range("i3", Range("i3").End(xlDown)), _
Engine:=3, EngineDesc:="Evolutionary"
SolverAdd CellRef:=Range("k3", Range("k3").End(xlDown)), Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$P$12:$P$13", Relation:=1, FormulaText:="$R$12:$R$13"
SolverAdd CellRef:="$P$12:$P$13", Relation:=3, FormulaText:="$N$12:$N$13"
SolverAdd CellRef:=Range("n3", Range("n3").End(xlDown)), Relation:=2, FormulaText:="1"
SolverAdd CellRef:=Range("i3", Range("i3").End(xlDown)), Relation:=5, FormulaText:="binary"
SolverSolve

Игнорируются только ограничения для диапазонов Range("n3", Range("n3").End(xlDown)) и Range("k3", Range("k3").End(xlDown))

Любая помощь будет оценена по достоинству.

Спасибо!


person rwdvc    schedule 26.08.2011    source источник
comment
Сколько ячеек в игнорируемых диапазонах? Я думаю, что есть некоторые ограничения на версию решателя, включенного в Excel... solver.com/suppstdsizelim2.htm   -  person Tim Williams    schedule 27.08.2011
comment
В каждом игнорируемом диапазоне может быть 20 ячеек, и это не должно быть проблемой, потому что я могу решить эту проблему, если настрою ее вручную, а максимальные 200 переменных применяются только к изменяющимся ячейкам, которых у меня около 20, я полагаю.   -  person rwdvc    schedule 27.08.2011


Ответы (2)


Из справки XL:

"Relation Required Integer. Арифметическое отношение между левой и правой сторонами ограничения. Если вы выберете 4 или 5, CellRef должен ссылаться на настраиваемые (изменяющиеся) ячейки, а FormulaText не должен быть указано."

Ваш последний диапазон имеет отношение = 5, поэтому вы не можете включать FormulaText.

person Tim Williams    schedule 26.08.2011

У меня была такая же проблема, и FormulaText для диапазона с отношением = 5 не было проблемой, но проблема была FormulaText = "1". Каждое SolverAdd с FormulaText="1" игнорировалось в решателе. Решением для меня было просто добавить «1» в одну ячейку (например, E9) и установить FormulaText = «$ E $ 9». Вероятно, есть лучшее решение, но это было хорошо для меня...

person Jonhtra    schedule 11.07.2014