2016-04-26 9 views
-1

私は、(列Hのセル)を変更することによって目的関数(列Pのセル)を繰り返し解くVBAコードを作成しようとしています。ここで私は次の制約を持っています:繰り返して解決するVBAコード

最初の制約:H_i <= H_i-1, e.g. H3 <= H2など最後の行まで。

2番目の制約:L_i >= L_i-1, e.g. L3 >= L2など最後の行まで。

コードこれまで:H2

Sub Solver_Balances() 
'Automated solver to calculate the mass and heat balance 
'at each time increment of 1 sec as given by the datalogger 
' 
Worksheets("Sheet1").Activate 
RowCount = 2 
Do While Not IsEmpty(Worksheets("Sheet1").Range("H" & RowCount)) 
    SolverReset 
    SolverOk SetCell:=Range("P" & RowCount), MaxMinVal:=2, _ 
     ByChange:=Range("H" & RowCount), Engine:=1, _ 
     EngineDesc:="GRG Nonlinear" 
    SolverAdd Cellref:=Range("H" & RowCount), _ 
     Relation:=1, _ 
     FormulaText:=Range("H" & RowCount - 1) 
    SolverAdd Cellref:=Range("L" & RowCount), _ 
     Relation:=3, _ 
     FormulaText:=Range("L" & RowCount - 1) 
    Solversolve userfinish:=True 
    SolverFinish keepFinal:=1 
    RowCount = RowCount + 1 
Loop 
End Sub 

私の値は0.931の開始値(所定値)です。何らかの理由で私のコードはの値をH3に返信します。ここで私は0.93にもっと近い値を見つけると予想していました。さらに、私の目的関数は、値0.53が下限の下にある物理的関係に基づいて計算されます。

私が使用しているコードが正しい場合は誰でも教えてください。どんな助けもありがとう!

答えて

1

いくつかの調整を行った後、私は自分の問題を解決することができます。

これによりコード:

Sub Solver_Balances() 
'Automated solver to calculate the mass and heat balance 
'at each time increment of 1 sec as given by the datalogger 
' 
Worksheets("Sheet1").Activate 
RowCount = 2 
Do While Not IsEmpty(Worksheets("Sheet1").Range("H" & RowCount)) 
    SolverReset 
    SolverOk SetCell:="P" & RowCount, MaxMinVal:=2, ValueOf:=0, _ 
     ByChange:="H" & RowCount, Engine:=1, _ 
     EngineDesc:="GRG Nonlinear" 
    SolverAdd CellRef:="H" & RowCount, _ 
     Relation:=1, _ 
     FormulaText:="H" & RowCount - 1 
    SolverAdd CellRef:="L" & RowCount, _ 
     Relation:=3, _ 
     FormulaText:="L" & RowCount - 1 
    SolverSolve userfinish:=True 
    SolverFinish keepFinal:=1 
    RowCount = RowCount + 1 
Loop 
End Sub 
+0

ソルバにセル参照情報の取得は難しいです。他にもいくつかの課題があります。[この質問の答えを見る](http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-in-rows/36682703) – OldUgly