• ベストアンサー

VBAでの最小値抽出

ExcelのVBAにおいて,最小値の抽出方法の質問です. たとえばA1に変数nがあり,A2にnの関数(例えば=n^4-2n^3+5n-10とか)があるとします. A1を1から100まで動かしたときのA2の最小値を求めたいのですが,これはそのまま1から100まで値をズラっと出力すれば,あとはそこから最小値を探すだけで求まりますが,こういう方法はとらず,一発でこの最小値を1つのセルに出力させたいのです. いろいろわけあって,使用するセルを最小限におさえたく,この方法が知りたいのです. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

単純な方法ですが Sub test() n = 1 mx = n ^ 4 - 2 * n ^ 3 + 5 * n - 10 For n = 2 To 100 x = n ^ 4 - 2 * n ^ 3 + 5 * n - 10 If mx > x Then mx = x End If Next Range("A1").Value = mx End Sub

ok624
質問者

お礼

こんなにすばやく解答をいただきありがとうございました.

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

A2に =A1^4-2*A1^3+5*A1-10 と入力します。 ツール―ソルバー で、 目的セル:$A$2 目標値:最小値 変化させるセル:$A$1 制約条件:$A$1<=100,$A$1>=1,$A$1=整数 として、実行します。 これをマクロ記録で、もう一度実行します。 このマクロをユーザー設定でボタンに登録します。 なお、VBEでツール―参照設定でSOLVERにチェックを入れておきます。 これで、登録ボタンを押すと、$A$2に最小値が表示されます。      

ok624
質問者

お礼

こんな方法もあるんですね、ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

最小値を求めるアルゴリズムというものがあって、情報技術者の試験問題の解説書などに出てくるぐらい常識のもの。 B列の値を求める式など特に質問に持ち出さなくて良い。VBAをやるなら、エクセルVBAのメソッドやプロパティを覚えるほかに、基礎的なアルゴリズムを知ることが必要。 まず起こり得なさそうな数を初期値として(最小値候補値)変数にセット。前にも書いたが、椅子が1つあって、100人が配られた自分の持っている「1枚の数の書かれたカード」をじゃんけんの代わりに見せ合い、小さい方のカードを持っていたものがその椅子に座る(か座り続ける)。 これで全員の、数による「じゃんけん」が終わったら、最後に椅子に残った者のカードに書かれた数が最小値。 最小値・最大値は最後のレコード読むまで決らない。すなわち1回は絶対に全データを読む必要がある。ですから上記より能率的なアルゴリズムは無いだろう。 推測ではMIN関数の内部処理も、言語は別でも、処理ロジック・方法はこれを使っているのではないかな。 ーー Sub test01() m = 10000 '起こりえない大きい数 d = Range("A65536").End(xlUp).Row For i = 1 To d x = Cells(i, "A") y = x 'y = f(x) If m > y Then m = y End If Next i MsgBox m End Sub 質問の場合では'y = f(x)のところで関数で式で計算に置き換える。 >m = 10000 '起こりえない大きい数 を設置するのは、第1データから同じパターンの処理をするため。 エクセルなら、m=Cells(1,"A")としても良い。本質問なら第1(行)データにより計算した関数式による計算値をセットする。

ok624
質問者

お礼

返事が遅れてすみません。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A