You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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:相当于只对当前用户的BonusWeight做乘积求和,也就是你手动写的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}
  • 后续的SUMPRODUCTSUM逻辑和你手动写的完全一致,可读性更强,而且数据更新时会自动刷新结果

小提示:

如果你的数据量比较大,建议把公式里的整列引用(比如B:B)改成具体的单元格区域(比如B2:B1000),这样能提升计算效率哦!

内容的提问来源于stack exchange,提问作者timetravelprimer

火山引擎 最新活动