使用Excel INDIRECT进行矩阵计算

时间:2017-09-14 09:21:35

标签: excel excel-vba regression vba

我想使用LINEST函数和INDIRECT在Excel中运行回归。在运行回归之前,我需要选择日期之间的时间序列,并将YX与索引相乘。

Date    | Y | X | Index
30/06/1990   1.21    2.20    -   
30/09/1990   0.73    1.33    -   
31/12/1990  -0.07    1.31    -   
31/03/1991   1.64    0.80    1.00 
30/06/1991  -0.14    0.61    1.00 
30/09/1991   4.13    2.37    1.00 
31/12/1991   0.71    0.78    1.00 
31/03/1992   0.95    0.78    -   
30/06/1992   1.61    0.78    -   

通过使用上述数据,我需要使用从1991年3月31日至1992年6月30日的LINEST函数,但仅在索引为1时使用日期。

我的想法是使用INDIRECT指定日期范围,乘以LINEST( INDIRECT(Y)*INDIRECT(Index),INDIRECT(X)*INDIRECT(Index),0,0)但我有错误。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果目标范围内的单元格始终是连续的,请尝试...

H2,用CONTROL + SHIFT + ENTER确认:

=SMALL(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($A$2:$A$10)))),1)

I2,用CONTROL + SHIFT + ENTER确认:

=LARGE(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($A$2:$A$10)))),1)

J2,只用ENTER确认:

=LINEST(INDEX($B:$B,H2):INDEX($B:$B,I2),INDEX($C:$C,H2):INDEX($C:$C,I2),0,0)

enter image description here

否则,请尝试以下方法......

H2,用CONTROL + SHIFT + ENTER确认:

=LINEST(N(OFFSET($B$2:$B$10,SMALL(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($B$2:$B$10)-ROW($B$2)))),ROW(INDIRECT("1:"&SUM(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,1))))))),0,1)),N(OFFSET($C$2:$C$10,SMALL(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($C$2:$C$10)-ROW($C$2)))),ROW(INDIRECT("1:"&SUM(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,1))))))),0,1)),0,0)

enter image description here

但是,对于Excel 2010及更高版本,可以使用MODE.MULT代替...

H2,用CONTROL + SHIFT + ENTER确认:

=LINEST(INDEX($B:$B,N(IF(1,MODE.MULT(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($A$2:$A$10)*{1,1}))))))),INDEX($C:$C,N(IF(1,MODE.MULT(IF($A$2:$A$10>=F2,IF($A$2:$A$10<=G2,IF($D$2:$D$10=1,ROW($A$2:$A$10)*{1,1}))))))),0,0)

希望这有帮助!