如何在含多级下拉列表的多工作表Excel工作簿中统计指定用户的各项目总数量?
如何在含多级下拉列表的多工作表Excel工作簿中统计指定用户的各项目总数量?
嗨,我来帮你搞定这个跨工作表统计的需求~
首先我先理清楚你的场景:你有31个分别命名为1到31的工作表,每个表里都有用户(C列)和项目(D列)的下拉选择,同一个用户和项目可能在单表或多表中重复出现。现在想在汇总表里选一个用户,自动算出这个用户每个项目在所有工作表中的总出现次数,对吧?
你已经能用=COUNTIFS('15'!$C:$C, E4, '15'!$D:$D, E5)统计单表的结果,那只要把这个逻辑扩展到所有31个表就行,给你两个实用的方法:
方法一:适合所有Excel版本(兼容性强)
在汇总表的统计单元格里输入这个公式:
=SUMPRODUCT(COUNTIFS(INDIRECT("'"&ROW(1:31)&"'!$C:$C"), E4, INDIRECT("'"&ROW(1:31)&"'!$D:$D"), E5))
我给你拆解下这个公式的逻辑:
ROW(1:31)会生成1到31的连续数字,刚好对应你的工作表名称;INDIRECT("'"&ROW(1:31)&"'!$C:$C")会把数字转换成对应的工作表列引用,比如'1'!$C:$C、'2'!$C:$C直到'31'!$C:$C;COUNTIFS会对每个工作表单独统计符合用户(E4)和项目(E5)的数量;- 最后
SUMPRODUCT把所有工作表的统计结果加总,得到总数。
方法二:适合Excel 365/2021(更简洁)
如果你用的是支持动态数组的Excel版本,还能换成更直观的写法:
=SUM(COUNTIFS(INDIRECT("'"&SEQUENCE(31)&"'!$C:$C"), E4, INDIRECT("'"&SEQUENCE(31)&"'!$D:$D"), E5))
这里用SEQUENCE(31)代替ROW(1:31),生成1到31的序列,逻辑和方法一完全一样,只是写法更清晰。
几个实用小贴士
- 提升性能:公式里用了整列引用(
$C:$C),如果你的数据不是整列都有内容,建议改成固定范围,比如$C$2:$C$1000,这样Excel不用扫描整列,计算会更快; - 项目下拉优化:可以给汇总表的项目列做个自动更新的下拉列表,把所有工作表里的项目去重后作为选项,用这个公式就能生成所有唯一项目:
把这个公式的结果作为数据验证的来源,就能直接选择项目,不用手动输入啦;=UNIQUE(VSTACK(INDIRECT("'"&SEQUENCE(31)&"'!$D:$D"))) - 注意工作表稳定性:如果之后有工作表改名或被删除,公式会报错,所以尽量保持1到31的工作表名称不变哦。
备注:内容来源于stack exchange,提问作者SCT73
相关产品推荐
相关产品推荐

