質問: エクセルマクロ:ソルバーの反復計算を中止する マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。 現在は以下のような記述です。 solverok setcell:="$f$33", maxminval:=1, valueof:="0", bychange:="$f$27:$o$27" solversolve userfinish:=true 宜しくお願いいたします。
回答: こんばんは。 ご質問は、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 でソルバー アドインが機能しないか、解を得られない