いろいろ試してみると、解の求まり方が、PCの性能により異なるように見られます。 たとえば、同一のOfficeバージョンおよびソルバーの設定でも、高性能PCと比較して低性能PCではより時間が掛かる」だけでは無く、 解が求まらない場合があります。 ただし、その場合でも、「改善が見られない最大時間」(以降、「最大時間」と呼称)を大きくすることで解に達し易くなるようです。 右図赤枠 PC性能と、「最大時間」の値について
よって、「最大時間」を試行回数に応じて大きくしていくようにすると、「容易に解が求まり易い場合は短時間で、求まりにくい場合は、長時間掛かるがいつかは求まる。」とすることが出来そうです。 具体的には、初期値30から始めて、試行回数が増えるに従って、 「最大時間」を30,60,120,240と大きくしていきます。(最大値300) 下図の赤枠内が、「最大時間」の初期設定と、試行回数に応じて倍増していく処理。下図赤枠内 SolverGet関数は、ソルバーの設定値を取得する関数 SolverOptions関数は、ソルバーのパラメータを設定する関数 |
![]() |
処理内容と名前が不一致のため、名前を変更
Private Function SolverDialog(
↓
Public Function Solver_Solve(
ソルバーの設定パラメータを見ると、目的値は名前で参照されますが、変化させるセルのアドレスは即値に展開されてしまいます。
・・・ 変化させるセルは固定値ではなく、数式で作成しているため、名前で参照できないようです。
このままでは、変化させるセルを拡張/縮小した場合に、パラメータを変更する必要があります。
かといって、固定範囲とするとする場合、同じく、変化させるセルを拡張/縮小した場合に名前範囲を再定義する必要があります。
よって、ここでは、プログラムによりパラメータのセルアドレスを名前で設定します。
これにより、変化させるセル範囲を変更しても、名前の再定義やソルバーパラメータの再設定が不要となります。
下図がソルバーのパラメータを設定する部分。SolverOptions関数の例を参考。
SolverGet関数は、ソルバーの設定値を取得する関数
SolverOptions関数は、ソルバーのパラメータを設定する関数