如何修改Excel公式实现多列检索指定位置运动员并计算平均重量?
多位置匹配的运动员重量平均值计算方案
完全可行,以下是针对不同Excel版本的实现方法:
适用于Excel 365/2021的动态数组方案
如果你的Excel支持动态数组功能,用这个公式最简洁:
=AVERAGE(FILTER(INDEX(data,,MATCH(B5,Headers,)),BYROW(INDEX(data,,MATCH("position *",Headers,0)),LAMBDA(row,OR(row=B3)))))
公式说明:
INDEX(data,,MATCH("position *",Headers,0)):自动匹配所有以「position 」开头的列(比如position 1、position 2等),无需手动指定列数BYROW(...,LAMBDA(row,OR(row=B3))):逐行检查当前运动员的所有位置列,只要有一列等于B3的位置值,就标记为符合条件FILTER:筛选出符合条件的运动员对应的B5列(重量列)数据AVERAGE:计算这些数据的平均值
兼容旧版Excel的SUMPRODUCT方案
如果用的是没有动态数组的旧版Excel,用这个公式:
=SUMPRODUCT((COUNTIF(INDEX(data,,MATCH("position *",Headers,0)),B3)>0)*INDEX(data,,MATCH(B5,Headers,)))/SUMPRODUCT(--(COUNTIF(INDEX(data,,MATCH("position *",Headers,0)),B3)>0))
公式说明:
COUNTIF(...):统计每一行中位置列等于B3的次数,只要次数大于0,就说明该运动员符合条件- 分子部分:把所有符合条件的运动员的重量值相加
- 分母部分:统计符合条件的运动员总数
- 两者相除得到平均值
已知具体位置列数的简化方案
如果你明确知道有多少个位置列(比如只有position 1和position 2),可以用数组公式直接扩展条件(旧版Excel需按Ctrl+Shift+Enter输入):
=AVERAGE(IF((INDEX(data,,MATCH("position 1",Headers,))=B3)+(INDEX(data,,MATCH("position 2",Headers,))=B3)>0,INDEX(data,,MATCH(B5,Headers,))))
公式说明:
(列1=B3)+(列2=B3)>0:表示只要列1或列2等于B3,就判定为符合条件IF函数筛选出符合条件的重量值,最后用AVERAGE计算平均值
内容的提问来源于stack exchange,提问作者DDYC
相关产品推荐
相关产品推荐

