• 締切済み

VBAでの最小値抽出2

http://oshiete1.goo.ne.jp/qa5468205.html で質問をさせていただいたものです。 今度は、 A1を入力項目(整数)として、 A2にいろんな関数を用いてできた、複雑なA1の関数があるとします。 A1を1~100まで動かしたときのA2の最小値を一発でA3に出したいのですが、どのように行えばいいでしょうか。 前回教えていただいたソースは、最小値を求めたい対象の式が簡単だったので直接書きにいけたのですが・・・ よろしくお願いします。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

#1です。 最小値を与えるXの値を知るのは意味があるかと考え、そういうコードにしましたが、元の値に戻したければ、適当な変数に保存して置いて、書き戻せば良いでしょう。 その後のやりとりを見ると、関連する式がB1:B3にもありそうですね。#1のコードは再計算範囲を制限していますので、その部分をB1:B3も再計算の対象にする様に変更してください。念のためお知らせいたします。

  • tom11
  • ベストアンサー率53% (134/251)
回答No.4

>B1=vlookup(A1,データ,A1) >B2=offset(~,A1,0,1,1) >B3=if(A1<10,~~~) vlookupは、無理すれば、可能に見えますが。 offsetにこんな使い方ありました??? if文に戻り値がある、if文って、ありましたっけ??? そもそも、自分しかわからない関数を 他人に別れと言うのは、非常に不思議です。 簡単な、アルゴリズムで、出そうな最小値なので、 皆さんいろいろな、プログラムを書いているみたいですが。 もともとの、自分しか知らない、評価する計算式が自分でも 表現できないのであれば、不可能です。

  • van111
  • ベストアンサー率14% (1/7)
回答No.3

前回の質問は理解できたのでしょうか? できたのであれば締め切りをしてください。 回答はその後でもよろしいかと・・

ok624
質問者

お礼

締め切りなどという概念があることを知りませんでした。ありがとうございました。

  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

>前回教えていただいたソースは、最小値を求めたい対象の式が簡単だったので直接書きにいけたのですが・・・ あなたの言う、もっとも、複雑な、計算式を 補足して、例示してください。 その複雑な式、もしかして、プログラミングの 演算式では、表現できないものでは、ないでしょうね。

ok624
質問者

お礼

たとえば別シートに大量のデータ等が用意してあって B1=vlookup(A1,データ,A1) B2=offset(~,A1,0,1,1) B3=if(A1<10,~~~) というふうに値が用意されているときで、 A2=B1*B3/B2 こういう場合を想定しています。(本当はこのようなものが20個ぐらいのあるのですが・・・)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

先の質問を閉める事をおすすめします。 「一発で」というご希望に沿っているかどうか分かりませんが、遊んでみました。最小値を与える関数ということで、A2に、=(A1-5)^2+4といった式を入れて、マクロを実行すると、A3に最小値、A1に最小値を与えるxを与えます。(A2とA3は当然同じ値になりますが)汎用的にやるなら、前の質問の回答にあった、ソルバーをマスターされた方が良いと思います。 Sub test() Dim i As Double Dim minValue As Double Dim xToMin As Double Application.ScreenUpdating = False Application.Calculation = xlManual For i = 1 To 100 Range("A1").Value = i Range("A2").Calculate If i = 1 Then minValue = Range("A2").Value xToMin = i Else If minValue > Range("A2").Value Then minValue = Range("A2").Value xToMin = i End If End If Next i Range("A3").Value = minValue Range("A1").Value = xToMin Application.Calculation = xlAutomatic Application.ScreenUpdating = True End Sub

ok624
質問者

お礼

ありがとうございます。 初心者の自分にはとても勉強になります。 この方法ですと、入力項目(A1)が最終的に変わってしまうのですね。 変わらない方法があれば助かります。(これぐらいなら自分でもなんとかなりそうなので、考えてみます。)

関連するQ&A