• ベストアンサー
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数3216
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんばんは。 ご質問は、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 でソルバー アドインが機能しないか、解を得られない

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • VBAでソルバーを停止せずに動かすには

    こんにちは。 VBAで、ソルバーを含んだコードを書いていますが、実行の時にソルバーで計算している度にメッセージボックスが表示されて、OKを押す必要があります。メッセージが表示されない、またはOKが自動的に押されるようにするにはどうすればいいでしょうか。コードは、次のようになっています。 Range("E164").Value = "0.1" Range("E165").Value = "0" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130",  ByChange:="$C$38" SolverSolve Range("AE7").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.1" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE8").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.2" Then SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE9").Value = Range("J3").Value Range("E164").Value = "0.1" Range("E165").Value = "0.3" SolverOk SetCell:="$E$25", MaxMinVal:=3, ValueOf:="2130", ByChange:="$C$38" SolverSolve Range("AE10").Value = Range("J3").Value ・・・ などの繰り返しになっています。 どうぞよろしくお願いいたします。

  • エクセルのマクロでのソルバーの使い方に関して教えてください。

    エクセルのマクロでのソルバーの使い方に関して教えてください。 下記のようなソルバーを含むマクロを組んでいます。(一部です。) SolverReset SolverOk SetCell:="$B$10", MaxMinVal:=3, ValueOf:="0", ByChange:="$M$46" a = SolverSolve(True) If a = 0 Then SolverFinish KeepFinal:=1 Else SolverFinish KeepFinal:=0 End If ソルバーを起動させ、"B10"が0になるように計算させ、 ソルバーの返り値をaに入れます。このとき、a=0の場合は、つまり最適値を得た場合のみ, 解を保存したく、a=0の場合、SolverFinish KeepFinal:=1で、保存するようにしています。  しかし、実際は、a=0の場合でも解を保存してしまい、元の値に戻せていません。  最適値を得られなかった場合に、元の値に戻したい場合は、どのように記載すれば良いでしょうか?  よろしくお願いします。

  • マクロでソルバーを使えますか?

    VBAは未経験です。エクセルでソルバーをマクロで記録し、実行しようとしたらエラーメッセージが出てしまいました(コンパイルエラーsubまたは functionが定義されていません)。 マクロにソルバーを組み込むこと自体ができないのでしょうか? 宜しくお願いします。 Range("E4:M4").Select Selection.Copy Range("E11").Select ActiveSheet.Paste Range("E4:M4").Select Selection.Copy Range("E12").Select ActiveSheet.Paste SolverOk SetCell:="$E$7", MaxMinVal:=3, ValueOf:="20", ByChange:="$D$5:$K$5" SolverSolve Range("E4").Select End Sub

  • 【Excel】マクロにソルバーを組み込んだ時の対処方法

    下記のようにマクロを組みましたが、ソルバーが解を見つけた時にいちいちOKをクリックしないと貼り付けに進みません。以下の作業を何回も繰り返すのですが、すべて自動的に行くにはどのように修正すればよろしいでしょうか? 宜しくお願いいたします。 Sheets("optimise").Select ActiveWindow.ScrollRow = 1 Range("B7").Select Selection.Copy Range("E7").Select ActiveSheet.paste SolverOk SetCell:="$E$35", MaxMinVal:=1, ValueOf:="0", ByChange:="$E$29:$R$29" SolverSolve Range("E29:R29").Select Selection.Copy Sheets("Table").Select Range("G7").Select ActiveSheet.paste Application.CutCopyMode = False Sheets("optimise").Select Range("B8").Select Selection.Copy Range("E7").Select ActiveSheet.paste SolverOk SetCell:="$E$35", MaxMinVal:=1, ValueOf:="0", ByChange:="$E$29:$R$29" SolverSolve Range("E29:R29").Select Selection.Copy Sheets("Table").Select Range("G8").Select ActiveSheet.paste

  • VBA エクセル 2003作成→2007実行について

    コマンドボタンを押すとソルバーが実行されるものを2003で作成したのですが、2007で実行しようとすると、 コンパイルエラー プロジェクトまたはライブラリが見つかりません。 と表示されて実行できません。 ご教授お願いします。 Private Sub CommandButton5_Click() SolverOk SetCell:="$E$176", MaxMinVal:=2, ValueOf:="0", ByChange:= _ "$D$173:$I$173,$H$167,$F$129:$J$129,$G$130:$J$130,$H$131:$J$131,$I$132:$J$132,$J$133" SolverSolve End Sub

  • EXCELマクロを実行したときのコンパイルエラー

    EXCELでSolverをマクロで実行出来るようにしたいのですが、 マクロの記録のボタンをクリック→ツールでソルバーを選択→目的セル、目標値、変化させるセルを選択→実行→OK→記録終了で、マクロを作成し、 マクロを開いて実行をすると、コンパイルエラーが表示され、「subまたはFunctionが定義されていません」と表示されて止まってしまいます。ちなみに、EXCEL2003でも2007でも同じ状況です(ToT)。 マクロのソースは下記のようになっていて「SolverOk」のところがblueに反転してとまっています。 どなたか対処方法をご存知でしたら教えて頂けないでしょうか?よろしくお願いいたします(m_m) Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2011/9/13 ユーザー名 ' ' SolverOk SetCell:="$E$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$E$7" SolverSolve End Sub

  • excelのソルバーをVBAで複数行繰り返したい

    目的セル  A1 変化させるセル  B1:E1 から始めて、A2,B2:E2、A3,B3:E3・・・ というように行を一列ずつずらして繰り返したいと思いプログラミングの知識とか全然ないんですが、あちこち調べて、 Sub Macro1() Dim x As Integer For x = 1 To 5 SolverOk SetCell:="Cells(x,1)", MaxMinVal:=3, ValueOf:="1", ByChange:="Range(Cells(x,2),Cells(x,5))" SolverSolve Userfinish:=True  Next x End Sub というところまで作ってみたんですが、実行してみると一行目は変わるもののそれ以降が変化しません。 理由がまったくわからないんですが、どなたかおかしなところがわかる方お教えくださいm(__)mm(__)m

  • VBAでの、マクロ参照をするソルバー

    ソルバー中の変数が、マクロを実行した値の場合はどのようにすればいいのでしょうか? たとえば操作するセルを変えても、あるマクロを実行しないと目的のセルが変わらない場合です。 solversolveのshowrefを利用して以下のように書きましたが、最適化はされたと表示されますがマクロを実行してくれませんでした。 Sub Macro() SolverReset SolverOk SetCell:="$C$17", MaxMinVal:=1, ValueOf:="0",   ByChange:="$B$17:$B$18" SolverOptions MaxTime:=900, Iterations:=900, Precision:=0.01, AssumeLinear:= _ False, StepThru:=True, Estimates:=1, Derivatives:=1, SearchOption:=1, _ IntTolerance:=10, Scaling:=False, Convergence:=0.1, SolverSolve UserFinish:=False, ShowRef:="macro1"

  • エクセル ソルバー セル参照をVBAで

    エクセル ソルバーのセル参照をVBAコードで変更しようとしていますが,複数のセル参照がうまくいきません. まず,マクロの記録でセルc3の値を2にするようにC2とC4の値を変更するというコードを記録させました. SolverOk SetCell:="$C$3", MaxMinVal:=2, ValueOf:="6",ByChange:="$C$2,$C$4" 次にセル参照をコードで操作するために"$C$3"の部分はcells(3,3)と置き換えてもうまく起動したのですが,"$C$2,$C$4"の部分は,cells(2,3),cells(4,3)と置き換えると, コード内でエラーメッセージ「コンパイルエラー,修正候補,名前付き引数」とでます.この場合どう修正すればいいのでしょうか. コードでセル参照を操作しようという動機は,例えば「アクティブセルから下のセルを順に3つ参照するよう」など,場合に応じてマクロを指示するためですが,ためしに試みた時点で上記内容でつまずいてしまいました. よろしくご教示お願いします.

  • 変化させるセルが変化しない

    お世話になります。 マクロ側のソルバー機能を利用して係数を推定しようと考えています。 係数の置き場所はワークシートです。計算値、実測値も同様です。 ただし、ワークシートに打ち出す計算値は外部dllで行います。 コードの概要は以下の通りです。 sub cal call 外部dll end sub optsolver For i = 1 To 100 Call cal SolverOk SetCell:="E18", MaxMinVal:=2, ValueOf:="0", ByChange:="D3:D4" SolverSolve UserFinish:=True SolverFinish KeepFinal:=1 Next i end 1回目のステップではワークシート上に計算値が得られるのですが、 2回目以降はセルの値(係数や計算値)が更新されませんし、結果として係数も推定できません。 100回くらい画面がちらついて、終わりの表示もなく終わります。 ここでいう係数と計算値は連動していないとソルバーは使えないと どこかで聞いたことがあるのですが、このためでしょうか。 (連動って、設定の数値を変えれば自動で追随することだろうとおもいます。) 使用環境は winxp pro sp2 excel 2003 です。