• ベストアンサー

エクセルマクロ:ソルバーの反復計算を中止する

マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。 現在は以下のような記述です。 SolverOk SetCell:="$F$33", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$27:$O$27" SolverSolve Userfinish:=True 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 でソルバー アドインが機能しないか、解を得られない

gucchi-you
質問者

お礼

ありがとうございます。多分いただいた内容でいけそうです。

関連するQ&A