Excel技术咨询:跨July、August工作表按组/部门统计唯一姓名及函数适配
解决跨工作表统计组/部门下唯一姓名数量的问题
先明确下你的核心需求:要统计每个组/部门在July和August两个工作表中所有出现过的唯一姓名总数,对吧?其实你尝试的SUMPRODUCT+MATCH/ISNA组合完全能帮你达成目标,下面给你拆解具体的实现方法:
方法1:手动指定组/部门的跨表唯一姓名统计
假设你要统计的组是"研发一组",部门是"技术部",可以用这个公式(记得把单元格范围换成你实际的数据区域):
=SUMPRODUCT(--(COUNTIFS(July!$B:$B,"研发一组",July!$C:$C,"技术部",July!$A:$A,July!$A:$A)>0)) + SUMPRODUCT(--(COUNTIFS(August!$B:$B,"研发一组",August!$C:$C,"技术部",August!$A:$A,August!$A:$A)>0)) - SUMPRODUCT(--(COUNTIFS(July!$B:$B,"研发一组",July!$C:$C,"技术部",July!$A:$A,August!$A:$A)>0))
公式逻辑拆解:
- 前两个
SUMPRODUCT分别计算July和August中对应组/部门下的唯一姓名数(COUNTIFS(...,姓名列,姓名列)>0用来筛选出唯一姓名,--把布尔值转成1/0后求和) - 最后一个
SUMPRODUCT是减去两个表中重复出现的唯一姓名数(也就是同时在两个表对应组/部门出现的姓名,避免重复统计)
方法2:动态匹配汇总表的组/部门(更高效)
如果你的汇总表已经列出了所有组和部门,想在对应行自动计算,可以用这个数组公式(Excel 365/2021直接回车即可,旧版本需要按Ctrl+Shift+Enter触发数组计算):
=SUM(--(UNIQUE(VSTACK(FILTER(July!$A:$A,(July!$B:$B=$E2)*(July!$C:$C=$F2)),FILTER(August!$A:$A,(August!$B:$B=$E2)*(August!$C:$C=$F2))))<>""))
公式逻辑拆解:
FILTER分别提取两个表中对应组(E2)和部门(F2)的所有姓名VSTACK把两个表的姓名合并成一个列表UNIQUE去除重复姓名SUM(--(...<>""))统计非空的唯一姓名数量(排除FILTER可能返回的空值)
关于你尝试的SUMPRODUCT(--(ISNA(MATCH())))
这个思路完全正确!比如要统计August中该组/部门有但July中没有的唯一姓名数,可以用:
=SUMPRODUCT(--(ISNA(MATCH(August!$A:$A,IF((July!$B:$B=$E2)*(July!$C:$C=$F2),July!$A:$A,""),0))*(August!$B:$B=$E2)*(August!$C:$C=$F2)*(August!$A:$A<>"")))
然后把这个结果加上July中该组/部门的唯一姓名数,就能得到跨表的总唯一数——本质和方法1的逻辑一致,只是拆分了重复项的计算步骤。
最后提个小建议:尽量用具体的单元格范围(比如July!$A$2:$A$1000)代替整列引用,这样公式运行速度会快很多哦!
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

