SUM.PRODUCT函数:如何获取对应单个单元格值的数值数组
基于用户名计算加权平均值的Excel实现方案
嘿,这个需求我太懂了!要根据用户名动态匹配对应的Bonus和Weight数组,自动计算加权平均,其实用Excel的函数就能轻松搞定,分两种场景给你详细说:
一、适合所有Excel版本的通用公式
如果你用的是旧版Excel(没有动态数组功能),可以用SUMPRODUCT配合条件判断来实现,公式如下:
=SUMPRODUCT((A$2:A$4=A2)*B$2:B$4*C$2:C$4)/SUMPRODUCT((A$2:A$4=A2)*C$2:C$4)
公式解释:
(A$2:A$4=A2):会生成一个由TRUE/FALSE组成的数组,只有和当前行用户名匹配的位置才会返回TRUE(计算时自动转为1),不匹配的为FALSE(转为0)- 第一个
SUMPRODUCT:相当于只对当前用户的Bonus和Weight做乘积求和,也就是你手动写的SUM.PRODUCT({5,10,7},{2,3,1}) - 第二个
SUMPRODUCT:计算当前用户所有Weight的总和,对应手动公式里的SUM({2,3,1}) - 把公式下拉到其他用户行,就会自动匹配对应的用户名计算结果
二、新版Excel(365/2021+)的更简洁方案
如果你用的是支持动态数组的新版Excel,用FILTER函数会更直观易懂,公式如下:
=SUMPRODUCT(FILTER(B:B,A:A=A2),FILTER(C:C,A:A=A2))/SUM(FILTER(C:C,A:A=A2))
公式解释:
FILTER(B:B,A:A=A2):直接筛选出当前用户所有的Bonus值,生成对应的数组(比如John Smith的就是{5,10,7})FILTER(C:C,A:A=A2):同理筛选出当前用户的Weight数组({2,3,1})- 后续的
SUMPRODUCT和SUM逻辑和你手动写的完全一致,可读性更强,而且数据更新时会自动刷新结果
小提示:
如果你的数据量比较大,建议把公式里的整列引用(比如B:B)改成具体的单元格区域(比如B2:B1000),这样能提升计算效率哦!
内容的提问来源于stack exchange,提问作者timetravelprimer




