- 締切済み
最適値を自動的に総当りで計算させたいのですが
最適値を自動的に総当りで計算させたいのですが たとえばA列に下記のような無作為なデータがあるとします。 A1 10 A2 15 A3 -2 A4 500 A5 -27 A6 4 A7 20 A8 -12 A9 15 . . . B列は B1に「A1+A2」 B2に「A2+A3」 B3に「A3+A4」 ・ ・ ・ というようにA列の「一行下」を足したものを表示させます。 そしてそのB列のSUMを求める時の話ですが 「一行下」「二行下」と条件を変化させると 当然B列のSUMも変化していきますが この時最大の数値になるのは条件「何行下」にすればよいのかを 自動的に総当りで計算させたいのですが どのようにすれば良いでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
考えている行数の一番下の行の次からのセルは、データが無いのだろうから、0と考えて良いなら (1)1つ下を足す場合 A1+2*(A2+A3+A4+・・・最後の行まで)最後行以下の0は考慮外に出来る。 (2)2つ下を足す場合 A1+A2+2*(A3+A4+・・・最後の行まで)最後行以下の0は考慮外に出来る。 (3)3つ下を足す場合 A1+A2+A3+2*(A4+A5+・・・最後の行まで)最後行以下の0は考慮外に出来る。 以下同じ。 これを、1倍の部分と、2倍の部分を関数式で求めて(あるいはVBAで求めて)両者を足したものを 別列(2つの値の合計列)に出し、その合計列のMAXをとれば良いように思う。 ーーー A1+A2 A2+A3 A3+A4 ・・・・ ======== A1+(A2+A2+A3+A3+A4+A4+・・)
- keithin
- ベストアンサー率66% (5278/7941)
>B1に「A1+A2」 >B2に「A2+A3」 >B3に「A3+A4」 >・ >そしてそのB列のSUMを求める アタマの中でちょいと計算を並べ替えると =(A1+A2+A3)+(A2+A3+A4) 前半は固定,後半は何行ズラしたの分だけ全体をスライドした合計 というだけのお話になります。 で,ズラしたときに該当する「下のセル」が無いときにいったいどうしたいのか,説明が不足しています。 サンプル: 仮にA1からA10に元の数字が並んでいるとして ●下が無くても気にせず計算する C1に =SUM($A$1:$A$10,A1:A10) と記入し,C10までコピー貼り付ける C1の値:ズレがゼロだったときのB列の合計(A1+A1)+(A2+A2)+(A3+A3)… C2の値:ズレが1つのときのB列の合計(A1+A2)+(A2+A3)+(A3+A4)… C3の値:ズレが2つでのB列の合計(A1+A3)+(A2+A4)+(A3+A5)… : が総当たりで計算できます。可能性としては,合計が最大となるズレが複数見つかる場合もあり得ますね。
お礼
ありがとうございます。 参考にさせていただきます。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 外していたらごめんなさい。 A1セルからデータがあり、 その行以下の最大値をその行のA列数値にプラスすれば良いわけですよね? もしそうであればB1セルに =IF(A2="","",A1+MAX(A2:$A$1000)) としてオートフィルで下へコピーではどうでしょうか? これでA列のその行の値+その行より下のある最大値をプラスした値が表示されると思います。 ※ 「何行下」を求めたい場合は B1セルの数式を =IF(A2="","",MATCH(MAX(A2:$A$1000),A2:$A$1000,0)) としてオートフィルで下へコピーしてみてください。 これでその行より何行下に最大値があるか表示されるはずです。 尚、データは1000行目まで対応できる数式にしてみました。 最初に書いたように的外れならごめんなさいね。m(_ _)m
お礼
ありがとうございます。 参考にさせていただきます。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 =SUM(B:B)、又は=SUM(INDIRECT("B1:B"&COUNT(A:A)))で如何でしょうか。
お礼
ありがとうございます。 参考にさせていただきます。
- DJ-Potato
- ベストアンサー率36% (692/1917)
最後のデータはどうするのでしょうか。 A100までデータがあるとして、B100は 1)A101=0として、B100=A100とするのか、 2)B100そのものをデータとして無視するのか 3)循環させて、A101=A1とするのか 「n行下」の条件で 1)の場合 SUM(B1:B100) = SUM(A1:A100) + SUM(A(n+1):A100) = 2*SUM(A1:A100) - SUM(A1:An) 2)の場合 SUM(B1:B100) = SUM(A1:A(100-n)) + SUM(A(n+1):A100) = 2*SUM(A1:A100) - SUM(A1:An) - SUM(A(100-n+1):A100) 3)の場合 SUM(B1:B100) = SUM(A1:A100) + SUM(A1:A100) = 2*SUM(A1:A100) うしろのマイナス部分が最小値になるnが、SUM(B:B)の最大値ですね。
お礼
ありがとうございます。 参考にさせていただきます。
お礼
ありがとうございます。 参考にさせていただきます。