Excel如何跨多个工作表对不同位置的单元格动态求和
跨工作表动态匹配人员工时汇总方案
以下公式适配人员行位置变动、多表结构统一的统计场景,后续增删人员、增删月份工作表只要按规则维护即可自动完成汇总。
前置约定
所有月份工作表保持统一结构:
- A列为人员姓名列
- 第1行为工作领域列标题,所有表的领域字段命名完全一致
- 月份工作表按统一规则命名,比如
1月/2月/3月,不要带特殊符号
公式方案
适配Excel 365/2021及以上版本(推荐)
如果需要统计的目标姓名写在汇总表A2单元格,需要统计的目标领域写在汇总表B1单元格,直接在汇总单元格输入以下公式:
=SUMPRODUCT(SUMIF(INDIRECT("'"&{"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"}&"'!A:A"),A2,INDIRECT("'"&{"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"}&"'!"&MATCH(B1,'1月'!$1:$1,0)&":"&MATCH(B1,'1月'!$1:$1,0))))
公式逻辑说明:
- 用
MATCH函数自动定位目标领域在表头的列位置,不需要手动固定列号 - 用
SUMIF逐表匹配目标姓名对应的工时数据,不受人员行位置变动影响 SUMPRODUCT自动汇总所有工作表的匹配结果,普通回车即可生效- 大括号内为所有需要统计的月份工作表名称,后续新增/删除月份表时,直接在大括号内增删对应表名即可。
如果不想每次增删月份都修改公式,可以新建一个隐藏工作表命名为配置,在A列从A1开始逐行填写所有需要统计的月份表名,后续增删表只要在这列增删名称即可,公式可简化为:
=SUMPRODUCT(SUMIF(INDIRECT("'"&配置!A:A&"'!A:A"),A2,INDIRECT("'"&配置!A:A&"'!"&MATCH(B1,'1月'!$1:$1,0)&":"&MATCH(B1,'1月'!$1:$1,0))))
适配Excel 2019及更早旧版本
旧版本Excel对动态数组兼容性有限,输入以下公式后需要按Ctrl+Shift+Enter三键确认数组公式生效:
=SUMPRODUCT(IFERROR(INDIRECT("'"&配置!A:A&"'!"&ADDRESS(MATCH(A2,INDIRECT("'"&配置!A:A&"'!A:A"),0),MATCH(B1,'1月'!$1:$1,0))),0))
公式加了IFERROR容错,某个月份表没有目标人员信息时会自动按0计算,不会返回错误值。
注意事项
- 录入姓名时不要加前后空格、不要出现同名人不同字的情况,否则会匹配失败。如果存在重名人员,建议新增工号列作为唯一匹配字段,把匹配列从姓名列换成工号列即可。
- 所有月份表的表头行不要随意修改领域字段名称,否则会导致列匹配失败。
- 如果删除了某个月份工作表,只要把配置表/公式数组里对应的表名删掉即可,不会影响其他月份的统计结果。
内容的提问来源于stack exchange,提问作者stelicus
相关产品推荐
相关产品推荐

