使用Excel中的AverageIf追踪平均值

时间:2014-10-20 04:09:45

标签: excel vba excel-vba excel-formula ms-office

我试图找到最后3个实例的平均值。我正在使用AVERAGEIF语句,它将计算整个范围的平均值,但我需要它只计算它找到的最后3个实例(如果少于3个可用,则更少)。我需要G和H的整个专栏都能获得球队最后3场比赛的平均值。

这就是我所拥有的:

=AVERAGEIF(B3:C17,B17,D3:E17)

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用数组公式执行此操作(必须使用键 Ctrl + Shift + 输入)输入... <... / p>

基本步骤是:

  1. 查找包含团队名称的第三行(包括及以上)的行(否则使用第1行)
  2. 使用INDIRECT中的AVERAGEIF范围从B- that_row 到C- current_row 和D_ that_row 到E- current_row
  3. 因此,在单元格F17中,您将拥有公式

    {=AVERAGEIF(INDIRECT("B"&LARGE(IF(--($B$3:B17=B17)+($C$3:C17=B17),ROW($B$3:B17),1),3)&":"&CELL("address",C17)),B17,INDIRECT("D"&LARGE(IF(--($B$3:B17=B17)+($C$3:C17=B17),ROW($B$3:B17),1),3)&":"&CELL("address",E17)))}
    

    我们重复一些逻辑,因为我们有两个范围(标准范围和平均范围)。

    • IF(--($B$3:B17=B17)+($C$3:C17=B17),ROW($B$3:B17),1)表示如果列B或(使用+)列C的值为B17,请给我行号,否则为1(我们的&lt; 3情况......我们可以制作这个3,团队名称的第一行)
    • LARGE(...,3)会给我们这个数组中的第三高 - &gt;具有我们团队名称的第三高行号
    • INDIRECT("B"&...&":"&CELL("address",C17))将使用我们排在当前行的第三个最高行号,列B和C
    • 来为我们提供范围
    • 然后我们执行与AVERAGEIF中完全相同的操作,但使用此INDIRECT范围以及D和E列的等效项

    有趣的问题!祝好运。并记得使用 Ctrl + Shift + Enter 输入它!

    编辑上面的前两行出现#NUM!错误 - 这是因为LARGE函数试图获得2的数组中的第三大函数!另请注意,在某些情况下,列字母必须是绝对的(即$)才能复制到 Away 列。所以更新了公式:

    {=AVERAGEIF(INDIRECT("B"&LARGE(IF(--($B$3:$B17=B17)+($C$3:$C17=B17),ROW($B$3:$B17),1),MIN(3,ROW()-2))&":"&CELL("address",$C17)),B17,INDIRECT("D"&LARGE(IF(--($B$3:$B17=B17)+($C$3:$C17=B17),ROW($B$3:$B17),1),MIN(3,ROW()-2))&":"&CELL("address",$E17)))}
    
    • 3替换为MIN(3,ROW()-2),以便我们得到3,如果有,则为1或2,如果我们位于前两个数据行之一

答案 1 :(得分:1)

好的,我过早地发布了这个并尝试删除它,当我意识到它不会工作。它现在应该工作....提供你添加另一个条件,即A列中的游戏日期。请记住这是一个数组公式,所以点击ctrl + shift + enter。 A栏中的日期; B栏中的小组; D栏中的统计数据。此公式可以位于工作表上的永久性位置,因此您可以输入团队名称(此处显示为F13)以获取最近的三个统计数据。

  

= AVERAGE(VLOOKUP(LARGE(IF(B3:B24 = F13,A3:A24),1),A3:D24,4),VLOOKUP(LARGE(IF(B3:B24 = F13,A3:A24), 2),A3:D24,4),VLOOKUP(LARGE(IF(B3:B24 = F13,A3:A24),3),A3:D24,4))