SolverSolve 関数

問題の解決を開始します。 マウスを使った操作では、[ソルバー : パラメーター設定] ダイアログ ボックスで [実行] をクリックすることに相当します。

メモ ソルバー アドインは既定では有効になっていません。 この関数を使う前に、ソルバー アドインを有効にしてインストールしておく必要があります。 この方法については、「ソルバー関連の VBA 関数を使用する」を参照してください。 ソルバー アドインがインストールされたら、このアドインへの参照を設定する必要があります。 Visual Basic エディターでモジュールをアクティブにした状態で、[ツール] メニューの [参照設定] をクリックし、[使用できる参照][ソルバー] を選択します。 [Solver] チェック ボックスが [参照可能なライブラリ ファイル] に表示されない場合は、[参照] をクリックして \Program Files\Microsoft Office\Office14\Library\SOLVER サブフォルダーにある Solver.xlam を開きます。

SolverSolve( UserFinish, ShowRef)

UserFinish: 省略可能。バリアント型 (Variant) の値を使用します。 True を指定すると、[ソルバーの結果] ダイアログ ボックスを表示せずに結果を返します。 False を指定するか省略すると、結果を返し、[ソルバーの結果] ダイアログ ボックスを表示します。 ShowRef: 省略可能。バリアント型 (Variant) の値を使用します。 マクロの名前 (文字列として) を ShowRef 引数として渡すことができます。 このマクロは、次に示す理由のいずれかでソルバーが一時停止するたびに、[ 試用版ソリューションの表示 ] ダイアログ ボックスを表示する代わりに呼び出されます。 ShowRef マクロには、署名 関数 (整数としての理由) が必要です。 The argument Reason is an integer value from 1 to 5:

  1. [ソルバー オプション] ダイアログ ボックスの [反復計算の結果を表示する] チェック ボックスがオフになっていたため、反復のたびに関数が呼び出されました。または、ユーザーが Esc キーを押してソルバーが中断されたため、関数が呼び出されました。

  2. [ソルバー オプション] ダイアログ ボックスの [最大時間] の制限を超えたため、関数が呼び出されました。

  3. [ソルバー オプション] ダイアログ ボックスの [反復回数] の制限を超えたため、関数が呼び出されました。

  4. [ソルバー オプション] ダイアログ ボックスの [子問題の最大数] の制限を超えたため、関数が呼び出されました。

  5. [ソルバー オプション] ダイアログ ボックスの [実行可能解の最大数] の制限を超えたため、関数が呼び出されました。

マクロ関数は、ソルバーが停止する場合は 1 を返す必要があります ([試用ソリューションの表示] ダイアログ ボックスの [停止] ボタンと同じ)、ソルバーの実行を続行する場合は 0 ([続行] ボタンと同じ)。ShowRef マクロは、ワークシートの現在のソリューション値を検査したり、中間値の保存やグラフ化などの他のアクションを実行したりできます。 ただし、解の処理に悪影響を及ぼす可能性があるため、変数セル内の値を変更したり、目的セルと制約条件セルの数式を変更したりすることはできません。

SolverSolve の戻り値

ソルバーの問題が完全に定義されていない場合は、SolverSolve によって #N/A エラー値が返されます。 それ以外の場合は、ソルバーが実行され、SolverSolve によって、[ソルバーの結果] ダイアログ ボックスに表示されるメッセージに対応した整数値が返されます。

戻り値 メッセージ
0 ソルバーによって解が見つかりました。 すべての制約条件と最適化条件を満たしています。
1 ソルバーによって現在の解に収束されました。 すべての制約条件を満たしています。
2 現在の解の精度を上げることはできません。 すべての制約条件を満たしています。
3 反復回数が上限に達し、処理が中止されました。
4 目標セルの値は収束しません。
5 実行可能解が見つかりませんでした。
6 ユーザーの要求によってソルバーが停止しました。
7 この LP ソルバーに必要な線形条件が満たされていません。
8 問題が大きすぎるため、ソルバーで処理できません。
9 目的セルまたは制約条件セルの値でエラーが発生しました。
10 指定された制限時間に達し、処理が中止されました。
11 メモリ不足のため、問題を解決できません。
13 モデルでエラーが発生しました。 すべてのセルと制約条件が正しく指定されていることを確認してください。
14 ソルバーによって公差内で整数解が見つかりました。 すべての制約条件を満たしています。
15 実行可能 [整数] 解の数が上限に達し、処理が中止されました。
16 実行可能 [整数] 子問題の数が上限に達し、処理が中止されました。
17 大域解に確率収束しました。
18 すべての変数に上限と下限が必要です。
19 バイナリ制約条件または AllDifferent 制約条件で、変数の範囲が競合しています。
20 変数の上限と下限には、実行可能解を使用できません。

この例では、ソルバー関数を使用してビジネス上の問題において総利益を最大値にします。 SolverSolve 関数は、ソルバー ソリューションの実行を開始します。 前述した 5 つの条件のいずれかが満たされると、関数 ShowTrial が呼び出されます。この関数は整数値 1 から 5 を使用して、単にメッセージを表示します。

Worksheets("Sheet1").Activate 
SolverReset 
SolverOptions Precision:=0.001 
SolverOK SetCell:=Range("TotalProfit"), _ 
    MaxMinVal:=1, _ 
    ByChange:=Range("C4:E6") 
SolverAdd CellRef:=Range("F4:F6"), _ 
    Relation:=1, _ 
    FormulaText:=100 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=3, _ 
    FormulaText:=0 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=4 
SolverSolve UserFinish:=False, ShowRef:= "ShowTrial" 
SolverSave SaveArea:=Range("A33") 
 
Function ShowTrial(Reason As Integer) 
  Msgbox Reason 
  ShowTrial = 0 
End Function

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。