今回は、前の回にて作成した2つのマクロを書き換えて、本格的にソルバーを動かすマクロを作成します
前回作成した2つのマクロは、作成条件が次の3つの項目で違っていました
➀目的セル、変数セル、及び制約方法を指定するセルの行位置
②目標値の設定の仕方;シナリオ1/「最大値」、シナリオ2/「指定値」
③制約方法の指定:シナリオ1/「<=」、シナリオ2「>=」
記録したマクロのコードを比較して、上記の違いがどう反映されているかを見てみましょう!
上がシナリオ1で下がシナリオ2です
おおよそ、黄色の目印を付けたうち、どこが「変数」で置き換えられるか見当がついたと思います
変数で置き換えられる箇所をまとめると、次の通りになります
・SolverOK➡SetCell:「目的値のセル」
➡MaxMinVal:1は最大値、2は最小値、3は指定値
➡ValueOf:指定値がある場合に指定(無い場合は0)
・ByChange➡「変動する値:値範囲」
・ SolverAdd➡CellRef: 「制約条件の範囲」
➡Relation:制約方法の指定
*下の図の順番で指定:etc 「<=」は1、「=」は2)
➡FormulaText:制約条件値の指定
今回は前回作成したシナリオ1マクロを以下の3つ、
1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)
それぞれを変数で置き換えてマクロを動かせるようにしましょう!
1.範囲を指定できるようにしておく
今回はC2セルで1を選んだら上の行を操作する(前回のシナリオ1)、2を選んだら下の行(前回のシナリオ2)を操作するようにします
次の2.ではシナリオ1の前に、IF構文を配置し、C2セルに応じて前述の1~3の範囲を動かせるようにします
If mySheet.Range(“C2”).Value = “1” Then ~ else ~
2.マクロに変数をセットしてマクロを実際に動かす
➀If構文で変数を可変にする
②ソルバーのコードに変数を設定する
各X1、X2を1に直しながら、マクロを試してみてください
<まとめ>
今回は、前回操作した記録マクロの範囲(以下の3つの範囲)を事前に指定できるようにしました
1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)
次回はいよいよ、ループ処理により、複数のシミュレーションを一気に走らせることができるようにします!
コメントを残す