SolverOk 関数

ソルバーの基本的なモデルを設定します。 [データ | 分析] グループで [ソルバー] をクリックし、[ソルバー パラメーター] ダイアログ ボックスでオプションを指定するのと同じです。

注:

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

SolverOk( SetCell, MaxMinVal, ValueOf, ByChange, Engine, EngineDesc)

SetCell: 省略可能です。バリアント型 (Variant) の値を使用します。 作業中のワークシートの単一セルへの参照を指定します。 [ソルバー : パラメーター設定] ダイアログ ボックスの [目的セル] ボックスに相当します。 MaxMinVal: 省略可能です。バリアント型 (Variant) の値を使用します。 [ソルバー : パラメーター設定] ダイアログ ボックスの [最大値]、[最小値]、[] に相当します。

MaxMinVal 設定
1 最大化
2 最小化
3 値と一致

ValueOf: 省略可能です。バリアント型 (Variant) の値を使用します。 MaxMinVal が 3 の場合は、ターゲット セルが一致する値を指定する必要があります。

ByChange 省略可能 なバリアント型 (Variant)。 目的の結果をターゲット セルに取得できるように変更されるセルまたはセル範囲。 [ソルバー : パラメーター設定] ダイアログ ボックスの [変化させるセル] に相当します。

Engine: 省略可能です。バリアント型 (Variant) の値を使用します。 問題の解決に使用する解決方法として、Simplex LP メソッドには 2、GRG Nonlinear メソッドには 1、Evolutionary メソッドには 3 を指定します。 [ソルバーのパラメーター] ダイアログ ボックスの [解決方法の選択] ボックスの一覧に相当します。

EngineDesc 省略可能 なバリアント型 (Variant)。 問題の解決に使用する解決方法を文字列 ("Simplex LP"、"GRG Nonlinear"、または "Evolutionary") として指定する代替方法です。 [ソルバーのパラメーター] ダイアログ ボックスの [解決方法の選択] ボックスの一覧に相当します。

この例では、ソルバー関数を使用してビジネス上の問題において総利益を最大値にします。 SolverOK 関数は、SetCellMaxMinValByChange 引数を指定することで問題を定義します。

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 
SolverSave SaveArea:=Range("A33")

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

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