您可以使用数组公式来执行此操作(必须使用键 Ctrl+Shift+Enter 输入)...
基本步骤是:
- 查找包含团队名称的第三高行号的行(包括当前行及以上)(否则使用第 1 行)
- 使用
AVERAGEIF 中的INDIRECT 范围从B-that_row 到C-current_row 和D_that_row 到E-current_row
所以在单元格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 中的值为团队名称)
-
LARGE(...,3) 将给我们这个数组的第三高 --> 具有我们团队名称的第三高行号
-
INDIRECT("B"&...&":"&CELL("address",C17)) 将使用我们第三高的行号为我们提供当前行 B 和 C 列的范围
- 那么我们做的事情与您在
AVERAGEIF 中所做的完全相同,但使用此 INDIRECT 范围以及 D 和 E 列的等效项
有趣的问题!祝你好运。并且记得使用Ctrl+Shift+Enter进入!
EDIT 上面给出了前两行的#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