ベストアンサー
ソルバーを使って自動更新する方法とソルバーを使わずに自動更新する方法のどちらをお望みでしょうか。 もしソルバーを使わずに自動更新する方法がお望みなら、数学のカテゴリで質問し、得られた回答をExcelで実現してはいかがでしょうか。実現が難しい場合はそれについてExcelカテゴリで質問すればよいと思います。 ここでは、ソルバーを一定の条件で1回だけ実行することで正しい結果を得る方法が確立しているとして、ソルバーを実行してワークシートを自動更新する方法について簡単に説明します。 詳細説明をご希望の場合、あるいはうまくいかない場合等は返信ください。 大雑把に言えば、VBAからソルバーを実行するようにして、シートのイベントからそのVBAを呼び出すというものです。 以下順に説明します。 1.通常の方法でソルバーにて正しい解が得られるようにします。 2.マクロの記録で記録を開始し、ソルバーを実行し、記録終了します。 記録開始後はソルバーの実行では、セル内容の書き換えや条件変更を行わず、ダイアログ表示、「解決」、結果ダイアログで「OK」のみ行うようにします。 3.マクロ名を把握し、続いてVBE(マクロ編集画面)に入ります。 「マクロの表示」から記録したマクロを選びます。(1つなら得ればれているはずです) マクロの名前を把握してください。(何もしなければ「Macro1」になると思います) 続いて「編集」をクリックしてください。 4.記録したマクロに1か所加筆します。以下の1行があるはずです。 SolverSolve これを以下のようにします。 SolverSolve True 5.モジュール名を把握します。 モジュール名はVBE左上の「プロジェクト - VBAProject」ウィンドウの中でハイライトされているはずです。たいていは「Module1」になっていると思います。(VBEのウィンドウタイトルにも出ていると思います) 5.マクロをテストします。 VBEを閉じるなどによりシートに戻ります。 変数セルに適当な初期値を設定し、記録・加筆したマクロを実行します。 正しい結果が得られれば(あるいはソルバーが正しく動作していれば)成功です。 6.シートモジュールに移動します。 ワークシート見出しを右クリックし、「コードの表示」をクリックします。 7.イベントのコードを書きます。 例として、セルG4:G7のうち1つ以上が変更されたらマクロを起動することとし、マクロ名が「Macro1」、マクロのモジュール名が「Module1」だとします。(セル範囲とモジュール名は実情に合わせてください) コードを書く場所(VBEの真ん中~右の広いところ)に以下の5行をコピペします。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G4:G7")) Is Nothing Then Call Module1.Macro1 End If End Sub 8.シートに戻り、テストします。 上記7.で指定した範囲のセルを書き換えます。 ソルバーが実行されて解が得られれば成功・完成です。 なお、このブックを保存するときはマクロがあるため通常のブック(.xlsx)では保存できません。 マクロ有効ブック(.xlsm)で保存してください。
手順を1つ忘れていました。 VBEでソルバーの参照設定を行わないとソルバーのマクロが動きません。 上記4.の前後どちらかで参照設定を行います。 VBEのメニューバーの「ツール」→「参照設定」で出現するダイアログの「Solver」にチェックを入れて「OK」をクリックしてください。
質問者からのお礼コメント
何度も返信いただきありがとうございました。おかげ様で無事完成することが出来ました。
お礼日時:1/29 23:07