多表合并汇总:SUMIF 跨界求和
明细分散在 1 月、2 月、3 月三个工作表里,要做汇总。手工复制粘贴三次,下个月还得再来一遍。SUMIF 加跨表引用能一次解决。
一、单表条件求和的底子
=SUMIF(A:A,"技术部",C:C)
- A 列是条件区域(部门);
"技术部"是条件;- C 列是求和区域。
多条件用 SUMIFS,求和列放第一个参数:
=SUMIFS(C:C,A:A,"技术部",B:B,"已付款")
这是最容易记错的地方:SUMIF 求和列在最后,SUMIFS 求和列在最前。
二、跨单个工作表求和
工作表名是 1月,引用写法:
=SUMIF('1月'!A:A,"技术部",'1月'!C:C)
工作表名含空格、数字开头、或其他特殊字符时,必须加单引号。纯中文名有时不加也能跑,但加上永远安全。
三、三表求和:三种写法
写法 1:逐个相加,最笨也最稳
=SUMIF('1月'!A:A,A2,'1月'!C:C)+SUMIF('2月'!A:A,A2,'2月'!C:C)+SUMIF('3月'!A:A,A2,'3月'!C:C)
12 个月就是 12 段,长但绝对不会有歧义。表结构不一致时只能这么写。
写法 2:三维引用(表名连续、结构一致时可用)
=SUM(SUMIF(INDIRECT("'"&{"1月";"2月";"3月"}&"'!A:A"),A2,INDIRECT("'"&{"1月";"2月";"3月"}&"'!C:C")))
INDIRECT 拼出表名,数组常量提供表名列表,外面套 SUM 汇总。优点是加月份只需改数组,缺点是 INDIRECT 是易失函数,且表名拼错会报 #REF! 而不是明显报错。
写法 3:先合并明细再用透视表
数据 → 获取数据 → 从文件夹 / 从多个工作表合并
一次合并成一张大表,后面用什么公式都简单。这是长期方案,值得优先考虑。
四、用 SUMPRODUCT 做多表多条件
要同时按部门和状态跨表统计,SUMPRODUCT 能一次写完:
=SUMPRODUCT(('1月'!A2:A100=A2)*('1月'!B2:B100="已付款")*'1月'!C2:C100)
跨三张表相加,就把三块加起来。注意 SUMPRODUCT 不能用整列引用,必须写实际行范围,否则性能极差。
五、汇总表的标准做法
推荐结构:一张"汇总"表 + 若干"明细"表。
汇总表 A 列放部门清单(用 UNIQUE 生成或手工维护),B 列写:
=SUMIF(INDIRECT("'"&B$1&"'!A:A"),$A2,INDIRECT("'"&B$1&"'!C:C"))
B1 是月份标题(1月、2月…),横向向右拖就自动换表。这样汇总表只有一行公式,扩到 12 个月只是拖宽一点。
要更稳,把表名做成横向标题行,并在 INDIRECT 外面套 IFERROR:
=IFERROR(SUMIF(INDIRECT("'"&B$1&"'!A:A"),$A2,INDIRECT("'"&B$1&"'!C:C")),0)
新月份的表还没建时显示 0 而不是报错,汇总表的合计不会被打断。
六、常见坑
| 现象 | 原因 | 处理 |
|---|---|---|
#REF! | 表名拼错或含特殊字符未加引号 | 表名加单引号 |
| 结果为 0 但明明有数据 | 条件列里有空格或文本数字 | TRIM + 统一类型 |
| 结果偏小 | 求和区域行数与条件区域不一致 | 用整列或对齐范围 |
| 关闭源文件后报错 | INDIRECT 引用已关闭工作簿 | 改用直接引用 |
| 表名改了公式全挂 | 硬编码表名 | 用单元格存表名再拼接 |
七、速查
| 场景 | 写法 |
|---|---|
| 单条件 | =SUMIF(A:A,"技术部",C:C) |
| 多条件 | =SUMIFS(C:C,A:A,"技术部",B:B,"已付款") |
| 跨单表 | =SUMIF('1月'!A:A,A2,'1月'!C:C) |
| 跨多表 | 逐个相加,或 INDIRECT + 数组 |
| 长期方案 | 合并明细后做透视表 |
跨表公式的维护成本主要来自"表名"。把表名放在单元格里而不是写死在公式里,是让这份表能活过三个月的关键。