• 締切済み

Excelで余分な行を使わずに名前別で最大ドローダウンを出したいです。

http://okwave.jp/qa5372059.html 前の質問で回答番号:No.1の方の補足のところには書いたのですが、質問欄の説明が中途半端で分かりづらく、回答していただいた方を混乱させてしまいすみません。 改めて質問させてください。 二度も同じ質問をしてしまいすみません。 Excelで余分な行を使わずに名前別で最大ドローダウンを出したいです。 A      B 名前    損益 株     50 先物    30 株     -40 FX     -50 先物    20 株     30 株     -20 FX     -40 このような表があるとします。 名前別で最大ドローダウンを出す場合、以下で求められます。 最大ドローダウンとは資産額を時系列に並べて、最大資産から差を差し引いた結果、最大のマイナス幅のことです。 株だけの最大ドローダウンであれば、 C1、株の値 として、 C2に =IF(NOT(A2="株"),"0",B2) 以下オートフィル D1、株の残高 として、 D2に =C2 D3に =D2+C3 以下オートフィル E1、ドローダウン として、 【厳密にはプラスの取引もあるのでドローダウンではない時もありますが便宜上ドローダウンとしました】 E2に =D2 E3に =D3-MAX($D$2:D2) 以下オートフィル G1(どこでもいいですが)に =MIN(E:E) とすれば求められます。【G1の値が株の最大ドローダウンです】 しかし、これだとC、D、E列が余分に必要ですし、種類が増えてくると大変です。 そこで、マクロまたは関数で行を作らずに求められないかと思いました。 よろしくお願いします。

みんなの回答

回答No.3

当初の目的は 「列を増やさずに最大ドローダウンを出すことはできませんか。」 でした。項目数が増えるたびに作業列が増えることが問題だったのでしょう。 今回は >関数で行を作らずに求められないかと思いました。 のようです。行ではなく、作業列の間違いでしょう。 少なくとも数式では作業列を使わない限り、計算できないでしょう。 C2セル =SUMIF($A$2:A2,A2,$B$2:B2) 下へオートフィル D3セル =C3-IF(COUNTIF(A$2:A3,A3)>=2,MAX(IF(A$2:A2=A3,C$2:C2),0),C3) [Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる) 下へオートフィル 当方では、これ以上のことはできませんでした。 VBAを使えば作業列を使わずにできるのかもしれませんが、勉強不足のためご協力できません。 失礼いたします。m(_ _)m

noname#96616
質問者

お礼

どうもありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

A列とB列にデータがあるとして株の最大ドローダウンの値は次のようにして求めることができます。 表示したいセルに次の式を入力してから通常はEnterキーを押して確定しますがその際にCtrlキーとShiftキーを押しながらEnterキーを押して確定します。 =MIN(IF((A:A="株"),B:B)) 作業列を作って対応するなどは必要ありません。

noname#96616
質問者

補足

どうもありがとうございます。 やってみましたが、これだとA列が株の場合の最小値が出るだけで 質問のところに書いている最大ドローダウンはでませんでした。 よろしくお願いします。

回答No.1

リンク先の#1です 説明から数式を起こすとリンク先のようになると思います。 しかし、数式の説明から「損益」とは相対的な変動を示しているようです。 言い換えると直の値ではない。よって、理解に苦しみました。 C2セル =COUNTIF(A$2:A2,A2) D2セル =SUMIF($A$2:A2,A2,$B$2:B2) C2:D2 下へオートフィル E3セル =IF(C3>=2,MAX(IF(A$2:A2=A3,D$2:D2),0),D3) [Ctrl]+[Shift] +[Enter] で確定、配列数式です({}で囲まれる) F3セル =D3-E3 下へオートフィル S4セル =MIN(IF($A$2:INDEX(A:A,COUNTA(A:A))=R4,$F$2:INDEX(F:F,COUNTA(A:A)))) [Ctrl]+[Shift] +[Enter] で確定、配列数式です({}で囲まれる) 下へオートフィル 配列数式を使う上、SUMIFやCOUNTIFも使っていますので、3000行もあれば、重くて使い物にならないと思います。

noname#96616
質問者

お礼

どうもありがとうございます。 他の行を使わずに出したかったのでこれでは駄目でした。 すみません。 他の方法を模索してみます。

関連するQ&A