平均如果移动平均

我试图find一个五年的移动平均线,该线需要一个月的条件。 A列包含从2010年1月1日至今日的所有date的每日date。 B列包含每日数量。 基本上我想在一个滚动的5年期间平均1月的所有日子。 我可以很容易地做到这一点静态数字,但这张表将每天更新。

例如:

Date Quantity 1/1/2010 14,113 1/2/2010 15,364 

等等…

我写了这个公式:

 =AVERAGEIFS(OFFSET(B2,COUNT(B2:B10000)-1826,0,1826,1),A2:A10000,MONTH(A2:A10000)=1) 

这返回#VALUE!

您将无法使用AVERAGEIFS()。 AVERAGEIFS只做简单的迭代,不转换。

当设置可变范围时,我更喜欢使用INDEX来获得范围,因为它不是挥发性的。

所有的范围也必须是相同的大小。 因此,将列B限制到1826个单元但不将列A限制到相同的1826个单元将导致另一个错误。

使用这个数组公式:

 =AVERAGE(IF(MONTH(INDEX(A:A,MATCH(1E+99,B:B)-1826):INDEX(A:A,MATCH(1E+99,B:B)))=1,INDEX(B:B,MATCH(1E+99,B:B)-1826):INDEX(B:B,MATCH(1E+99,B:B)))) 

作为一个数组公式,在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。

在这里输入图像说明


您也可以使用date本身,而不是硬编码1826天。 这将允许闰年。

 =AVERAGE(IF(MONTH(INDEX(A:A,MATCH(DATE(YEAR(TODAY())-5,MONTH(TODAY()),DAY(TODAY())),A:A,0)):INDEX(A:A,MATCH(TODAY(),A:A)))=1,INDEX(B:B,MATCH(DATE(YEAR(TODAY())-5,MONTH(TODAY()),DAY(TODAY())),A:A,0)):INDEX(B:B,MATCH(TODAY(),A:A)))) 

这是另一种select

=AVERAGE(IF(A2:A5000>EDATE(TODAY(),-60),IF(MONTH(A2:A5000)=1,B2:B5000)))

CTRL + SHIFT + ENTER确认

这并不试图find特定范围的数据,只是查看过去5年和1月份的所有数据和平均行。 有一些额外的开销看所有行,但你有一个相对较less的数据量,所以我不希望这是重要的