vba - 在 Excel 中使用 AverageIf 的跟踪平均值

标签 vba excel excel-formula ms-office

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

这就是我所拥有的:

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

enter image description here

最佳答案

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

基本步骤是:

  • 查找包含团队名称的第三高行号的行(包括当前行及以上)(否则使用第 1 行)
  • 使用 INDIRECT您的 AVERAGEIF 中的范围从 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 来输入!

    编辑 以上给出了 #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)))}
    
  • 替换了 3MIN(3,ROW()-2)这样我们得到 3(如果有),但如果我们在前两个数据行之一中,则得到 1 或 2
  • 关于vba - 在 Excel 中使用 AverageIf 的跟踪平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26458462/

    相关文章:

    Excel:删除 TEXTJOIN 公式的重复结果

    excel - 从 Excel 中的文本单元格中提取 URL

    vba - 以编程方式在 VBA 代码中设置断点

    excel - 如何使用 VBA 从 Excel 用户窗体中读取复选框的值

    vba - 填充 Excel 字符串列以实现最快的后续 VBA 搜索的最佳方法(我可以使用元数据等吗?)

    excel - VBA 项目资源管理器仍然显示由宏关闭的 Excel 工作簿

    excel - VBA 全局变量

    excel - 捕获用户错误并在错误后重新启用 application.events

    python - excel.make_response_from_query_sets 返回 TypeError None

    excel - Excel 中的库存历史公式