AverageIf 移动平均线

AverageIf Moving Average

我试图找到一个 5 年移动平均线,该平均线采用一年中的月份条件。 A 列包含从 1/1/2010 一直到今天的当前日期的每日日期。 B 列包含每日数量。基本上,我想在滚动的 5 年期间平均一月份的所有天数。我可以很容易地把它作为一个静态数字来做,但是这个 sheet 会每天更新。

例如:

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)

这个returns#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来确认


您也可以使用日期本身而不是硬编码的 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))))

还有一个选择

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

使用CTRL+SHIFT+ENTER

确认

这不会尝试查找特定范围的数据,只会查看所有数据并对日期在过去 5 年和 1 月的行求平均值。查看所有行会有一些额外的开销,但你的数据量相对较少,所以我不认为这会很重要