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 月的行求平均值。查看所有行会有一些额外的开销,但你的数据量相对较少,所以我不认为这会很重要
我试图找到一个 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 月的行求平均值。查看所有行会有一些额外的开销,但你的数据量相对较少,所以我不认为这会很重要