2017-02-08 3 views
2

の毎日の時系列から毎週戻り値を計算します。私のデータは次のようになります:は、私は毎日の価格の時系列から、ミューチュアル・ファンドの毎週のリターンを計算したい価格

A  B  C  D  E 
DATE  WEEK W.DAY MF.PRICE WEEKLY RETURN 
02/01/12 1 1  2,7587 
03/01/12 1 2  2,7667 
04/01/12 1 3  2,7892 
05/01/12 1 4  2,7666 
06/01/12 1 5  2,7391 -0,007 
09/01/12 2 1  2,7288 
10/01/12 2 2  2,6707 
11/01/12 2 3  2,7044 
12/01/12 2 4  2,7183 
13/01/12 2 5  2,7619 0,012 
16/01/12 3 1  2,7470 
17/01/12 3 2  2,7878 
18/01/12 3 3  2,8156 
19/01/12 3 4  2,8310 
20/01/12 3 5  2,8760 0,047 

日付は(dd/mm/yy)形式で、 "、"は小数点の区切りです。これは、次の式を使用して行われます。(前週の価格 - 最初の平日の価格)/(最初の平日の価格)。/2,7587 = -0007と秒間(2,7619 - 2,7288)である - 例えば、最初の週のためのリターン(2,7587 2,7391)である/ 2,7288 = 0012。

問題は、リストは年のために行くことであり、いくつかの数週間は、休日や他の理由により以下の5営業日を持っています。だから私は単に上記の式をコピーして貼り付けることはできません。 WEEKNUMとWEEKDAY関数を使用して、週番号と週日の余分な2つの列を追加しました。私はいくつかの数週間は、5未満の平日など平日3と平日2または終了といくつかのスタートを持って言ったように

WEEK RETURN 
1  -0,007 
2  0,012 
3  0,047 
.  
.  
.  

:私は式でこれを自動化する場合、またはVBAを使用して、このようなテーブルを得ることを望ん休日やその他の理由により。だから私は「 - /(最初平日のための価格)(価格最初の平日のための最後の平日のための価格を)毎週の最大値と最小平日に対応して価格を見つけて、式を適用」するために、Excelを伝えるための方法を考えています。

長い記事のため申し訳ありませんが、私は任意の助けをいただければ幸いです、できるだけ明確にすることを試みました!私は毎週の値を取得するには、いくつかの検索式を使用してそれを解決して、週ごとの簡単な計算を行うだろう

答えて

2

1つの式でそれを行うには:

=(INDEX(D:D,AGGREGATE(15,6,ROW($D$2:$D$16)/(($C$2:$C$16=AGGREGATE(14,6,$C$2:$C$16/($B$2:$B$16=G2),1))*($B$2:$B$16=G2)),1))-INDEX(D:D,MATCH(G2,B:B,0)))/INDEX(D:D,MATCH(G2,B:B,0)) 

あなたはすべての,へを変更する必要がありますローカル設定ごとに;

enter image description here

+0

@Scott Cranerありがとう、時間を大いに節約しました。あなたが私の質問にした編集を確認できたら、私は感謝します。 – orkanoid

+0

回答を得た後に質問を変更しないでください。新しい質問を作成します。これは、ダウン投票の現在の答えを開きます。 @orkanoid –

+0

ああ、申し訳ありませんが、それを知らなかった。編集内容を削除して今すぐ新しい質問を作成するか、それとも遅すぎますか? – orkanoid

1

(私は年連続5つの別々のワークシート、20本のミューチュアルファンドの日々の価格でそれぞれを持っています)。表を得られ

:カラムで

H I   J   K   L   M  
    first  last  first val last val return 
1 02.01.2012 06.01.2012 2,7587  2,7391  -0,007 
2 09.01.2012 13.01.2012 2,7288  2,7619  0,012 
3 16.01.2012 20.01.2012 2,747  2,876  0,047 

式I:列J中

=MINIFS($A:$A;$B:$B;$H2) 

フォーミュラ:列Kで

=MAXIFS($A:$A;$B:$B;$H2) 

は、式:

=VLOOKUP($I2;$A:$D;4;FALSE) 

列L中の式:

=VLOOKUP($J2;$A:$D;4;FALSE) 

列M中の式:

=(L2-K2)/K2 
+0

FWIW:MINIFSとMAXIFSは、Office 365のエクセル上でのみ使用可能です。そうでない場合は、AGGREGATEまたはARRAY MAX(IF())を使用する必要があります。また、それらのどれも配列式ではないので、完全な列参照を使用することができます。最後の一言VLOOKUPの第4の基準で「偽」を「偽」に置き換えます。説明のために@ScottCraner thx –

+0

"WRONG"のために申し訳ありません、英語に翻訳しながらそれはに入りました。 – pintxo

+0

私はMINIFS機能を使用できないと思う。 #NAMEを与え続ける?エラー。 @ScottCranerを使ってAGGREGATEとARRAY MAX(IF())関数をどのように使うべきですか? – orkanoid

関連する問題