- ベストアンサー
エクセルマクロ:ソルバーの反復計算を中止する
マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。 現在は以下のような記述です。 SolverOk SetCell:="$F$33", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$27:$O$27" SolverSolve Userfinish:=True 宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ご質問は、Solver が、設定された反復回数が終わっても、目的の値に達しない場合、ダイアログを出さない方法はないか、と意味だと思います。 ご質問の状況は良く分かりませんが、以下のサンプルを作ってみました。 以下は、整数の場合は、絶対に、目的の解が出ません。したがって、途中で、中断することになります。 オプション(SolverOptions)の 反復回数(Iteration)は、以下では感知されません。Maxtime が優先されるようです。SolverSolve の ShowRef:="DummyMacro"を入れて、行います。また、SolverOptions の 引数 StepThru が False にします。このオプションは、省略してもよいです。ShowRef のマクロは、なぜか動いてはいません。しかし、実際にないマクロを指定すると、エラーを返します。 実務的には、 Application.ScreenUpdating = False '実行プログラムコード Application.ScreenUpdating = True で、画面の切り替わりの部分のマクロを挟んだほうが、ちらつきがなく、マクロは速く終了すると思います。 'ワークシート上 A B C 2 =A1*B1 2 =A2*B2 2 =A3*B3 2 =A4*B4 2 =A5*B5 =SUM(C1:C5) '標準モジュール Sub TestSolver() Range("B1:B5").ClearContents Range("E1:E6").ClearContents SolverReset SolverOk SetCell:="$C$6", MaxMinVal:=3, ValueOf:="89", ByChange:="$B$1:$B$5" SolverOptions MaxTime:=3, Iterations:=10, StepThru:=False SolverAdd "$B$1:$B$5", 4, FormulaText:="整数" SolverAdd "$B$1:$B$5", 3, FormulaText:="0" SolverSolve UserFinish:=True, ShowRef:="DummyMacro" '←ここに入れる SolverFinish 1 Call CopySolveredRange '次のマクロ End Sub Sub DummyMacro() '実際は意味がない End Sub Sub CopySolveredRange() Range("E1:E6").Value = Range("C1:C6").Value End Sub (なお、こちらは、Excel 2003 のアドインのSolverですが、エラーのダイアログは、Excel Ver.4マクロです。次期 Ver.4マクロを追い出しにしたら、このアドインも当然、再開発することになるのかと思います。Excel2003では、調子が悪いという報告もあります。) http://support.microsoft.com/kb/819033/ja Excel 2003 でソルバー アドインが機能しないか、解を得られない
お礼
ありがとうございます。多分いただいた内容でいけそうです。