我正在尝试在工作表中使用 AVERAGEIF 公式来计算基于当前月份的移动平均值。我有以下数据:
A B C D E F G H I J K L M N
1 2017 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Ave
2 Cost/Req. $430 $432 $365 $391 $1250 $- $- $- $- $- $- $- ??
我想在 N2 中输入今天(5 月)1 月至 4 月的平均值以及 6 月 1 月至 5 月的平均值,依此类推。我尝试使用 COLUMN() 函数,但它不起作用。
AVERAGEIF(B2:M2,"COLUMN()<MONTH(NOW()")
任何想法?
谢谢!
答案1
我们来从几个角度分别来回答一下这个问题:
总结
=AVERAGE(INDIRECT("A2:"&ADDRESS(2,MONTH(NOW())-1)))
你的公式为什么不起作用?
该AVERAGEIF
函数接受标准参数,但它们似乎不能做任何非常复杂的事。我还没有找到它们语法的真正解释,但在线文档不要做比 更深刻的事情">32"
,而且你正在尝试使用整个公式。我还没有看到任何证据表明这种方法即使在理论上也是可行的。(我很想证明这是错的!)AVERAGEIF
(或AVERAGEIFS
)不是你想要的函数。
计算范围平均值
计算一系列值的平均数很容易。你显然已经知道如何做,甚至可以问出你的问题!假设值在 A2:L2 中(月份标题在顶部):
=AVERAGE(A2:L2)
但等一下,你只想平均到并且不包括当前月份。所以我们需要一种方法来计算基本平均公式的范围。5 月份是A2:D2
。我们如何计算呢?
计算范围的公式
好的,所以新的问题是如何AVERAGE
从当前月份获取一个范围(函数的引用)。Lookup & Reference
函数会在这里帮助你。可能有更简单的方法可以做到这一点,但我能想到的最好的方法是使用INDIRECT
返回引用/范围,如果我们给它适当的文本,这是一个更简单的问题。现在我们需要的就是想出文本“A2:D2”(代表五月)。A2 很简单:应该是一个常数。可能有一种方法可以将 4(代表四月,您想要的最后一个月份)转换为 D(您想要的列),但您也可以使用函数ADDRESS
计算D2
行/列号。请注意,它从正常情况下“向后”思考。所以 A2 将输入为ADDRESS(2,1)
。在你的例子中,你知道行 2,并且可以使用你想要的函数计算MONTH
你想要的列,然后减去 1 回到上个月。所以我们可以用得到“D2” ADDRESS(2,MONTH(NOW())-1)
。然后就是把它们放在一起的问题了。使用“与”符号将 A2 和 D2 结合起来。
="A2:"&(ADDRESS(2,MONTH(NOW())-1))
综合起来
现在我们有了要求平均值的区域的文本表示。该INDIRECT
函数会将其转换为函数可以使用的实际范围AVERAGE
。然后,最终函数会将其全部求平均值:
=AVERAGE(INDIRECT("A2:"&ADDRESS(2,MONTH(NOW())-1)))
一些注释
如果您的正确范围确实是 U192:AF192,请将公式中的 2 替换为 192,并将 20 添加到行参数(因为 U 位于 A 右侧 20 行)。
我还附上了各个中间步骤计算的屏幕截图。最终公式是第 8 行的公式。我还采取了下一步措施,只对过去几个月而不是全年进行平均,在第 12 行使用相同的想法。
请注意,整个方法将使你的平均值取决于电子表格的打开时间。如果你打开它下一个2 月份的平均值仅涵盖两个月,而不是整个 2017 年。1 月份将完全停滞。您可能需要想出一个更智能的公式来处理月份参数。
答案2
答案3
这个问题很难理解。我的理解是
今天(五月),我想知道一月至四月的平均值。六月,我想知道一月至五月的平均值,等等。
这很容易处理为具有一个固定(锚定)端和一个浮动端的范围的平均值。在单元格中 V193
(即在Feb
列中,在成本/需求值 ($432) 下),输入
=AVERAGE($U192:U192)
在 中求值时V193
,这相当于AVERAGE(U192:U192)
,相当于AVERAGE(U192)
,相当于U192
,即 1 月份的值 430 美元。但现在我希望您将其拖拽/填充到右侧,即 Column AF
。在 中W193
,这将更改为=AVERAGE($U192:V192)
,因为$U192
( 的第一个参数AVERAGE
)锚定到 Column U
,但U192
( 的第二个参数AVERAGE
)浮动到当前列左侧的一列。依此类推,直到AF193
,其中包含=AVERAGE($U192:AE192)
。