Ошибка решателя Excel VBA (в частности, целочисленное ограничение)

avatar
Frank
8 августа 2021 в 17:39
145
3
1

Извините, если мой английский грамматически неверен (я не из Великобритании или США). Я пытаюсь настроить решатель Excel при использовании кода VBA. Пока что это макрос, который я установил:

Sub solver()

SolverReset

SolverAdd CellRef:="$G$32", Relation:=2, FormulaText:="$I$32"
SolverAdd CellRef:="$G$95", Relation:=3, FormulaText:="$I$95"
SolverAdd CellRef:="$G$96", Relation:=1, FormulaText:="$I$96"
SolverAdd CellRef:="$G$128", Relation:=3, FormulaText:="$I$128"
SolverAdd CellRef:="$G$129", Relation:=1, FormulaText:="$I$129"

SolverOk SetCell:="$C$2", MaxMinVal:=2, ValueOf:=0, ByChange:="C4:I31", _
Engine:=2, EngineDesc:="Simplex LP"

SolverAdd CellRef:="$C$4:$I$31", Relation:=4, FormulaText:="integer"

SolverSolve True
End Sub

Однако с этим кодом у меня возникают проблемы с целочисленным ограничением, потому что решатель по-прежнему выдает десятичные числа для переменных решения. Кто-нибудь знает, что здесь происходит?

Я уже добавил в решатель из опций -> надстройки. Я также проверил редактор VBA -> ссылки

Источник

Ответы (3)

avatar
ASH
26 августа 2021 в 02:44
0

Для Солвера вы можете записать макрос, чтобы делать все, что вам нужно. При необходимости измените диапазоны на динамические, и вы получите то, что вам нужно. Вы можете узнать, как сделать диапазоны динамическими, по ссылке ниже.

https://www.thespreadsheetguru.com/blog/2014/7/7/5-разные-способы-найти-последнюю-строку-или-последний-столбец-использование-vba

avatar
Frank
10 августа 2021 в 15:17
0

Только что нашел решение. Я использовал:

SolverSolve True

Это должно быть:

SolverSolve

Очевидно, Excel принимает решение, предоставляя True, по-прежнему давать решение для десятичного числа. Кто-нибудь может это проверить?

avatar
Gokhan Aycan
8 августа 2021 в 20:04
0

Не использовал решатель почти 20 лет, но документация MS для SolverAdd выглядит следующим образом:

Поиск решения( CellRef, Relation, FormulaText)

Обязательный вариант CellRef. Ссылка на ячейку или диапазон ячеек который образует левую часть ограничения. Отношение Требуемое целое число. Арифметическое соотношение между левой и правой частями ограничение. Если вы выберете 4, 5 или 6, CellRef должен ссылаться на решение ячейки переменных, а FormulaText не следует указывать.

В вашем примере вы выбираете 4, а также указываете FormulaText?

Также не уверен, что проблема именно в этом, извините, если не имеет значения.

Frank
9 августа 2021 в 18:28
0

Спасибо за быстрый ответ. Я уверен, что CellRef относится к ячейкам переменной решения. Я просто попытался опустить FormulaText из кода, но я все еще получаю десятичные числа в ячейках переменной решения.