ゴールシークとマクロ ① 無限遠からのアプローチ

昨日は、「ゴールシークが探しに行く向き」について、いくつか実験を行った。
infoment.hatenablog.com
結果、「二次方程式など複数の解がある場合は注意しましょう」という「もわっ」とした結論で強引に結んでしまった。

しかし・・・待てよ?
ということで、もう少し考察してみる。
f:id:Infoment:20190328215016p:plain

そのためには、ゴールシークをマクロで疑似的に再現する必要がある。いやいや、その前に念のため、マクロの記録で確認してみよう。
例えば、昨日の↓ この例で確認だ。
f:id:Infoment:20190328215213p:plain

結果は・・・

Range("B2").GoalSeek Goal:=10000, ChangingCell:=Range("B1")

何だ、良いのがあるじゃないか。
と、ここで考えた。遥か昔、物理の授業で習った感じで無限遠からアプローチさせれば良いのでは?
f:id:Infoment:20190328215739p:plain

+無限大から探し出した値と、-無限大から探し出した値が一致したならば、答えは一つしかない。
しかしこの手法には、問題点が二つある。

  1. Excel で無限大を指定できるのか。
  2. そのように大きな値を開始値とした場合、処理に時間が掛かるのではないか。

まず1つ目の問題だが、そもそも「」は具体的な数値ではなく、限りなく大きいことを表している記号に過ぎない(らしい)。従ってこの場合、実生活で登場しないぐらい大きな数値を充てておけば問題ないだろう。
ということで、今回は景気よく「10の30乗」ぐらいにしてみよう。

二つ目の問題を確認するために、実際に10の30乗で試してみた。

Sub GoalSeekTest()
    Range("B1") = 10 ^ 30
    Range("B2").GoalSeek Goal:=10000, ChangingCell:=Range("B1")
End Sub

結果、処理は体感できないほど一瞬で終わってしまった。
ということは、これを利用して・・・。

考えがまとまらなくなってきたので、明日に続きます。

参考まで。