如何创建动态公式以查找给定向量的一组值的平均值

时间:2019-01-09 10:07:19

标签: excel

我正在尝试创建一个公式,根据给定的向量,该公式为给定数据集中的最后12个条目的平均值。

让我们举个例子:

我在F2,G2,H2和I2列中分别有Company1,Company2和Company3日期。然后从第3行到第33行,我有几个月的日期从2016年5月开始。

Date    Company1          Company2       Company3
May-16                   2,453,845  
Jun-16                   13,099,823     
Jul-16                   14,159,037     
Aug-16   38,589,050      8,866,101  
Sep-16   63,290,285      13,242,522     
Oct-16   94,005,364      14,841,793     
Nov-16   123,774,792     7,903,600      41,489,883 
Dec-16   93,355,037      12,449,604     69,117,105 
Jan-17   47,869,982      13,830,712     83,913,764 
Feb-17   77,109,905      10,361,555     68,176,643

目标是创建一个公式,当我将其向下拖动时,可以正确计算给定公司的最后12个值的平均值。

例如,我将在表“ B2:C5”中说:

Company1     76,856,345 
Company2     11,120,859 
Company3     65,674,349 
而且,如果将新的Company4添加到列表中,那么我只需要将其拖到公式中即可计算出Company4最近12个月的平均值。

直到现在,我已经提出了以下公式:

=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(G:G),ROW(G:G)),ROW(INDIRECT("1:"&MIN(12,COUNT(G:G))))),ROW(G:G),G:G ))

此公式仅考虑最后12个值即可正确计算给定列的平均值。最后一步是提出一个包含所有列的公式,然后计算给定公司的平均值。

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议您使用命名范围在G:I列中定义数据。添加公司后,只需修改命名范围的规格即可。我使用了 Target 这个名称。当然,如果您愿意,可以将其替换为$ G:$ I,但我建议减少该范围内的行数,这在命名时更易于管理。 使用以下公式将目标公司第一行中的公司名称提取到平均值表的第一列中。这是为了确保两个位置的名称拼写完全相同。

=INDEX(Target,1,ROW()-2)

数字2表示包含公式的行上方的行数。它是从单元格M3复制到此处的。 ROW()-2在那里创建数字1,随着公式被向下复制,该数字按顺序计数。 现在我在N3单元格中具有以下公式,并向下复制。

=SUM(INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0)))

该公式仅将连续3行中的G,H和I列相加。 在最后一步中,我将上面建立的范围定义(不包括SUM()函数)插入到您现有的公式中。

=AVERAGE(LOOKUP(LARGE(IF(ISNUMBER(INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0))),ROW(INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0)))),ROW(INDIRECT("1:"&MIN(12,COUNT(INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0))))))),ROW(INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0))),INDEX(Target,0,MATCH($M3,INDEX(Target,1,0),0))))