按条件统计列出现次数:Excel多角色履职人数统计求助
解决不同角色承担需统计职责的人数统计问题
看起来你卡在了数组函数的组合使用上,我来帮你拆解这个问题,给出几个实用的解法,覆盖不同Excel版本。
首先先明确你的数据结构(假设是下面这样,你可以对应自己的表格调整):
- 人员表(比如Sheet1):列包含
角色(B列)、职责(C列) - 职责对照表(比如Sheet2):A列是
职责名称,C列是计入统计标记(X表示需要统计)
解法1:用SUMPRODUCT(兼容所有Excel版本)
这是最稳妥的方案,不需要按数组快捷键,直接输入公式即可。比如要统计Boss角色中承担需计入职责的人数,在目标单元格输入:
=SUMPRODUCT(--(Sheet1!$B$2:$B$100="Boss"),--(VLOOKUP(Sheet1!$C$2:$C$100,Sheet2!$A$2:$C$100,3,FALSE)="X"))
公式解释:
--(Sheet1!$B$2:$B$100="Boss"):把“角色是Boss”的逻辑判断转成1(是)或0(否)的数组--(VLOOKUP(...)="X"):对每个人员的职责,从对照表中查找对应的计入标记,判断是否为X,同样转成1/0数组- SUMPRODUCT会把两个数组对应位置相乘后求和,最终得到符合条件的人数
如果你更习惯用INDEX+MATCH替代VLOOKUP(避免VLOOKUP只能从首列匹配的限制),可以用这个版本:
=SUMPRODUCT(--(Sheet1!$B$2:$B$100="Boss"),--(INDEX(Sheet2!$C$2:$C$100,MATCH(Sheet1!$C$2:$C$100,Sheet2!$A$2:$A$100,0))="X"))
解法2:SUM+IF数组公式(旧版Excel需要三键结束)
如果你之前尝试过SUM+IF但失败,大概率是没按数组快捷键。公式如下:
=SUM(IF((Sheet1!$B$2:$B$100="Boss")*(VLOOKUP(Sheet1!$C$2:$C$100,Sheet2!$A$2:$C$100,3,FALSE)="X"),1,0))
输入完成后,必须按Ctrl+Shift+Enter(旧版Excel),Excel会自动在公式两端加上{},表示这是数组运算。
解法3:Excel 365/2021动态数组解法(自动生成所有角色统计)
如果你用的是新版Excel,可以一步到位生成所有角色的统计结果,不需要逐个写公式:
=GROUPBY(Sheet1!$B$2:$B$100,--(VLOOKUP(Sheet1!$C$2:$C$100,Sheet2!$A$2:$C$100,3,FALSE)="X"),SUM,,1)
这个公式会自动输出一个两列的结果:第一列是所有角色(Boss/Worker/Aid),第二列是对应角色中承担需统计职责的人数。
常见问题排查
你之前失败的可能原因:
- VLOOKUP单独用无法输出数组:没错,但把它嵌套在SUMPRODUCT、SUM+IF这类支持数组运算的函数里,就能批量处理每个单元格的职责匹配了
- 数据匹配失败:确保人员表的职责名称和对照表的完全一致(比如没有多余空格、大小写统一),否则VLOOKUP/MATCH会返回错误值,导致统计出错
- 数组公式没按三键:旧版Excel中SUM+IF这类数组公式必须按Ctrl+Shift+Enter才能生效
内容的提问来源于stack exchange,提问作者Romain Corthésy




