dポイントプレゼントキャンペーン実施中!

マクロを使ってソルバーを用いた計算をしているのですが、反復回数が制限に達した時、自動的に中止して次の計算に進みたいのですが、どのように記述すればよろしいでしょうか。
現在は以下のような記述です。

SolverOk SetCell:="$F$33", MaxMinVal:=1, ValueOf:="0", ByChange:="$F$27:$O$27"
SolverSolve Userfinish:=True

宜しくお願いいたします。

A 回答 (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 でソルバー アドインが機能しないか、解を得られない
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/07 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています