Решите закодированное уравнение, используя решатель в VBA - PullRequest
0 голосов
/ 11 февраля 2019

Я пишу код VBA, который использует решатель в Excel, чтобы минимизировать ошибку между эталонными значениями и значениями, предсказанными моим уравнением.Но я хотел бы сохранить уравнения в коде VBA, а не добавлять их в виде столбцов в Excel.Это для защиты моих уравнений с помощью макроса, защищенного паролем.Коды выглядят следующим образом:

Ячейки B2 и C2 - это переменные, которые будут меняться решателем до минимума.Ячейки F9 и G9 являются эталонными значениями.

Range("B2").Select
ActiveCell.FormulaR1C1 = "1"
Range("C2").Select
ActiveCell.FormulaR1C1 = "1"

SolverReset

SolverAdd CellRef:="$B$2", Relation:=3, FormulaText:="0.3"
SolverAdd CellRef:="$B$2", Relation:=1, FormulaText:="1.7"

SolverAdd CellRef:="$C$2", Relation:=3, FormulaText:="1"
SolverAdd CellRef:="$C$2", Relation:=1, FormulaText:="20"

value1 = 28.563041 - 0.6895786 * Range("B2").Value - 0.1685979 * 
Range("C2").Value 
value2 = 31.161328 - 0.1194945 * Range("B2").Value - 0.1156287 * 
Range("C2").Value 

error1 = (Range("$F$9").Value - value1 ) ^ 2
error2 = (Range("$G$9").Value - value2) ^ 2

error = error1 + error2
Range("J11").Value = error

SolverOk SetCell:="$J$11", MaxMinVal:=2, ValueOf:=0, ByChange:="$B$2:$C$2", _
    Engine:=1, EngineDesc:="GRG Nonlinear"

SolverSolve

Проблема: переменные B2 и C2 инициализируются со значением 1, но не изменяются во время оптимизации решателем.Я хотел бы знать, как получить переменные в цикле решателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...