如何在Google Sheets中用单元格内容作为WEIGHTED.AVERAGE函数参数
解决Google Sheets中用单元格逗号分隔内容计算加权平均的问题
直接用下面的公式就能得到你要的结果:
=WEIGHTED.AVERAGE(VALUE(FILTER(SPLIT(A1, ","), MOD(SEQUENCE(COUNTA(SPLIT(A1, ","))), 2)=1)), VALUE(FILTER(SPLIT(A1, ","), MOD(SEQUENCE(COUNTA(SPLIT(A1, ","))), 2)=0)))
公式拆解:
SPLIT(A1, ","):把A1里的逗号分隔文本拆成一个个独立的文本元素,比如10,2,50,3,60,1会变成{"10","2","50","3","60","1"}SEQUENCE(COUNTA(SPLIT(A1, ","))):生成从1开始的连续数字序列,对应拆分后每个元素的位置MOD(..., 2)=1:筛选出位置为奇数的元素(也就是你的数值部分:10、50、60),MOD(..., 2)=0筛选出偶数位置的元素(权重部分:2、3、1)VALUE():把筛选出的文本元素转成数值类型,因为WEIGHTED.AVERAGE只接受数值参数- 最后把数值数组和权重数组传入
WEIGHTED.AVERAGE完成计算
为什么之前的方法无效?
TEXT(A1)和CELL("contents",A1)返回的都是完整的文本字符串,而WEIGHTED.AVERAGE需要的是两个独立的数值集合(一个是待平均的数值,一个是对应的权重),直接传文本字符串函数无法识别参数结构,所以会报错。
如果觉得上面的公式太长,也可以用INDEX+SEQUENCE的写法,效果完全一致:
=WEIGHTED.AVERAGE(VALUE(INDEX(SPLIT(A1, ","), SEQUENCE(ROUNDUP(COUNTA(SPLIT(A1, ","))/2), 1, 1, 2))), VALUE(INDEX(SPLIT(A1, ","), SEQUENCE(ROUNDDOWN(COUNTA(SPLIT(A1, ","))/2), 1, 2, 2))))
内容的提问来源于stack exchange,提问作者Nilson
相关产品推荐
相关产品推荐

