Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据每日价格时间序列计算每周收益_Vba_Excel_Excel Formula_Finance - Fatal编程技术网

Vba 根据每日价格时间序列计算每周收益

Vba 根据每日价格时间序列计算每周收益,vba,excel,excel-formula,finance,Vba,Excel,Excel Formula,Finance,我想从每日价格的时间序列计算共同基金的每周回报。我的数据如下所示: 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/0

我想从每日价格的时间序列计算共同基金的每周回报。我的数据如下所示:

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
WEEK    RETURN
 1     -0,007
 2      0,012
 3      0,047
.       
.       
.       
日期为(dd/mm/yy)格式,且“,”为十进制分隔符。这可以通过以下公式实现:(最后一个工作日的价格-第一个工作日的价格)/(第一个工作日的价格)。例如,第一周的回报率为(27391-27587)/27587=-0007,第二周的回报率为(27619-27288)/27288=0012

问题是这个名单持续了一年,有些星期由于假期或其他原因少于五个工作日。所以我不能简单地复制和粘贴上面的公式。我使用WEEKNUM和WEEKDAY函数为WeekNumber和WEEKDAY添加了额外的两列,我认为这可能会有所帮助。我想通过公式或使用VBA实现自动化,并希望得到如下表格:

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
WEEK    RETURN
 1     -0,007
 2      0,012
 3      0,047
.       
.       
.       
正如我所说的,由于假期或其他原因,有些星期少于五个工作日,有些星期以工作日2开始,或以工作日3结束。因此,我正在考虑一种方法,告诉excel“找到对应于每周最大和最小工作日的价格,并应用公式(最后一个工作日的价格-第一个工作日的价格)/(第一个工作日的价格)”


对不起,我的帖子太长了,我尽量说清楚,如果有任何帮助,我将不胜感激!(我连续几年有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
第一栏中的公式:

=MINIFS($A:$A;$B:$B;$H2)
J列中的公式:

=MAXIFS($A:$A;$B:$B;$H2)
K列中的公式:

=VLOOKUP($I2;$A:$D;4;FALSE)
L列中的公式:

=VLOOKUP($J2;$A:$D;4;FALSE)
M列中的公式:

=(L2-K2)/K2

要通过一个公式实现这一点:

=(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))
您可能需要将所有的
更改为
根据您的本地设置


FWIW:MINIFS和MAXIFS仅在Office 365 Excel上可用。如果不是,则需要使用聚合或数组MAX(If())。此外,由于这些都不是数组公式,因此可以使用完整列引用。最后一个音符。将VLOOKUP第四条标准中的
错误
替换为
错误
@ScottCraner thx,以便于澄清。很抱歉,
错误
,翻译成英语时它滑入了。我想我不能使用MINIFS函数。一直给我起个名字?错误。我应该如何使用聚合和数组MAX(IF())函数@ScottCraner?谢谢@Scott Craner,你为我节省了很多时间。如果您能检查我对问题的编辑,我将不胜感激。在得到答案后,请勿更改问题。创建一个新问题。它为反对票打开了当前的答案@对不起,我不知道。我应该现在删除编辑并创建一个新问题,还是太晚了?不要回滚编辑并提出新问题@orkanoid