如何统计单元格区域字符串出现次数,多值单元格应用分数权重?
无需中间权重表的标签加权得分计算方案
需求背景
输入数据中部分单元格包含多个逗号分隔的标签(例如单元格内容为"A,B"),规则是单个单元格内有N个标签时,每个标签的权重为1/N,最终要计算每个标签的总加权得分。目前需要先通过COUNTA+SPLIT生成中间权重表,再用SUMIF计算结果,希望省去中间步骤直接得到最终得分。
实现公式
在空白单元格(比如用于输出结果的起始单元格)输入以下数组公式,根据Google Sheets版本执行:
- 旧版:输入后按
Ctrl+Shift+Enter确认 - 新版:直接回车即可
=QUERY(FLATTEN(SPLIT(TEXTJOIN(",",TRUE,A2:A&"|"&1/COUNTA(SPLIT(A2:A,","))),",")),"select Col1, sum(Col2) where Col1 is not null group by Col1 label sum(Col2) '总得分'")
注:将公式中的
A2:A替换成你实际的输入数据区域。
公式逻辑拆解
- 计算单标签权重:
1/COUNTA(SPLIT(A2:A,","))→ 拆分单元格内的标签,统计数量后取倒数,得到每个标签的权重 - 关联标签与权重:
A2:A&"|"&...→ 把每个标签和对应的权重拼接成「标签|权重」的格式 - 合并并拆分:
TEXTJOIN把所有拼接内容连成一串,再用SPLIT拆分成单个「标签|权重」项,FLATTEN将其转为单列结构 - 分组求和:
QUERY函数拆分「标签|权重」,按标签分组求和,最终输出标签和对应的总得分
高可读性替代公式(新版Google Sheets适用)
用LET函数定义变量,逻辑更清晰:
=LET( inputRange,A2:A, splitTags,SPLIT(inputRange,","), tagWeights,1/COUNTA(splitTags,1), tagWeightPairs,HSTACK(FLATTEN(splitTags),FLATTEN(tagWeights)), QUERY(tagWeightPairs,"select Col1, sum(Col2) where Col1 is not null group by Col1 label sum(Col2) '总得分'") )
同样替换inputRange为你的实际数据区域即可。
内容的提问来源于stack exchange,提问作者n0rmzzz
相关产品推荐
相关产品推荐

