- ベストアンサー
MAX とMIN早い方を見つけたい
例えば 為替のデータで 100円で買ったものが30日の間に 105円で勝ち ”○” 95円になると負け ”×” として MAX と MIN関数で それぞれ別の列に求めていますが、 どちらかの条件が先に満たされたら参照を終わりにしたいのです。 もしかしたら簡単かなと思いましたが、頭がこんがらがってしまいお知恵拝借おねがいできればよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関数では思いつかなかったので、マクロにしました。 データバックアップの上で確認してください。 Sub test1() Dim i,m i = 2 Do For m = 1 To 30 If Cells(i + m, 3) > Cells(i, 3) + 5 Then Cells(i, 8) = "○" Cells(i, 9) = "" Exit For End If If Cells(i + m, 4) < Cells(i, 3) - 5 Then Cells(i, 8) = "" Cells(i, 9) = "×" Exit For End If If m = 30 Then Cells(i, 8) = "△" Cells(i, 9) = "△" End If Next m i = i + 1 Loop Until Cells(i, 1) = "" End Sub
その他の回答 (2)
- ka_na_de
- ベストアンサー率56% (162/286)
初心者です。 質問は、こんな感じで考えていいのでしょうか? A1~A30に100で始まる30個の為替データがあり、 最初に105以上になったのなら勝ち 最初に95以下になったのなら負け を簡単に調べたい。 そうだとすると、B2に =IF(B1<>"","確定済",IF(A2>=105,"○",IF(A2<=95,"×","")))と記述し、 B3~B30はコピーアンドペースト ではいかがでしょうか? 意図と違いますか??? 違うようなら補足説明をお願いします。
MINならMAX側 MAXならMIN側 を参照して既に値が入っていたら求めない とか
補足
補足します。 <仮に数字をいれますと> A列 B列 C列 D列 E列 1 日付 始値 高値 安値 終値 2 mm/dd 99.2 100.0 98.5 99.7 3 mm/dd 99.7 101.0 99.5 99.9 4 5 という連続データ(3000行ほど)がある過去の任意の期間の分析をしています。 実際は長い式なんですがわかりやすく分解すると 2行目から F列 =MAX(OFFSET($C3,,,30,1)) G列 =MIN(OFFSET($D3,,,30,1)) と最高、最安を取得 今回の質問の 100円とは $C$2 の値です。勝ち負けの95円、105円というのは暫定的で変わることがありますが H列 =IF(F2-C2>5,"○","") G列 =IF(G2-C2>-5,"×","") と連続データなんですが、H、G列ともに表示される事があるのでよわっています。 つまり =MAX =MIN の照合期間を最大30日までで早く適合した方を探したいわけです。 説明がへたですみません。わかりましたらよろしくお願いします。