自学相伴,共同进步,大家好,这里是 EXCEL 自习室。
今天我们解决一个同学关于合并计算员工多个月工资总额的问题。主要用到 VSTACK、UNIQUE 和 FILTER 函数,让多个月份的数据自动合并、去重并精准求和。
原始数据说明
- 工作表命名:固定为【3月工资】【4月工资】【5月工资】三张分表,新建汇总表命名为【3个月数据合并】【汇总】
- 固定表头区域:所有月度工资表,B列=员工姓名、C列=所属班组
第一步:跨表合并与智能去重,提取唯一人员名单
核心公式:
=UNIQUE(FILTER(VSTACK('3月工资'!$B$5:$C$100, '4月工资'!$B$5:$C$100, '5月工资'!$B$5:$C$100), VSTACK('3月工资'!$B$5:$B$100, '4月工资'!$B$5:$B$100, '5月工资'!$B$5:$B$100)<>""))
原理解析:
1. VSTACK(垂直堆叠):这是Excel的神级函数,它能把“3月”、“4月”、“5月”三个工作表中的姓名和班组(B列和C列)像叠罗汉一样上下拼接到一起。
2. FILTER(条件过滤):在堆叠后的数据中,自动剔除掉空白行(<>""),保证数据的干净。
3. UNIQUE(提取唯一值):对过滤后的干净数据进行去重,瞬间生成一份包含所有人员姓名和班组的“花名册”。
第二步:动态合并多表全量数据
核心公式:
=FILTER(VSTACK('3月工资:5月工资'!B5:U197), CHOOSECOLS(VSTACK('3月工资:5月工资'!B5:U197), 1) <> "")
原理解析:
1. VSTACK(垂直堆叠):VSTACK('3月工资:5月工资'!B5:U197) 利用三维引用,直接将3月、4月、5月三个工作表中 B5:U197 区域的数据上下拼接成一张大表。如果后续需要加入6月数据,只需将引用改为 '3月工资:6月工资'!,公式自动扩展,无需重新调整范围。
2. CHOOSECOLS(选取指定列):CHOOSECOLS(VSTACK(...), 1) 从堆叠后的整张大表中提取第1列(通常是工号或姓名),用于判断该行是否为空行。
3. FILTER(条件过滤):以第1列不为空(<>"")作为筛选条件,将拼接后产生的空白行全部剔除,最终得到一份干净、连续的合并数据源,供后续汇总公式调用。
这里 VSTACK 在公式中出现了两次,Excel会分别计算。如果数据量较大(如上千行),建议还是使用 LET 函数将 VSTACK 的结果命名缓存,避免重复运算拖慢表格响应速度。
=LET(data, VSTACK('3月工资:5月工资'!B5:U197),FILTER(data, CHOOSECOLS(data, 1) <> ""))
第三步:按人精准匹配与薪资求和
核心公式:
=LET(aa, '3个月数据合并'!$B$3#, bb, FILTER(aa, INDEX(aa,0,1)=汇总!$B5), SUM(INDEX(bb,0,COLUMN(I3)-1)))
原理解析:
1、定义变量 aa
变量 aa: '3个月数据合并'!$B$3#
$B$3# 中的 # 是溢出引用运算符,它表示:从 B3 单元格开始,自动引用第二步公式动态溢出的整个数据区域。
也就是说,aa 就是第二步生成的那份完整的合并数据表。
# 号是数组函数的灵魂,它代表第二步中生成的整个溢出区域。无论数据增加到多少行,它都会自动跟随扩展。
2.定义变量 bb
变量 bb(按姓名筛选): FILTER(aa, INDEX(aa,0,1)=汇总!$B5)
INDEX(aa, 0, 1):从 aa 中提取第1列的所有数据,也就是所有人的姓名列。
INDEX(aa,0,1)=汇总!$B5:将姓名列逐个与汇总表当前行的姓名(B5单元格)做比较,返回一个由 TRUE/FALSE 组成的数组。
FILTER(aa, ...):根据上面的 TRUE/FALSE 数组,从 aa 中只保留姓名匹配的行。
最终 bb 就是:当前这个人(汇总! $ B5)在3-5月的所有工资记录行。
3. 求和
SUM(INDEX(bb, 0, COLUMN(I3)-1))
COLUMN(I3)-1 得到 8,表示要取 bb 中的第8列数据(对应某个月的工资金额列)。
INDEX(bb, 0, 8):从 bb(该员工的多个月份记录)中提取第8列的所有行,即该员工每个月的工资金额。
SUM(...):将这些金额加总,得到该员工3-5月的工资合计。
总结与建议
通过这套公式组合,我们实现了:
● 全自动合并:无需Power Query或VBA,纯公式搞定跨表数据拼接。
● 动态更新:只要源数据发生变化,汇总表会自动刷新。
● 结构清晰:利用LET函数,让复杂的嵌套逻辑变得可读、易维护。
掌握这三个步骤,你就是办公室里最懂效率的Excel达人。赶紧打开你的工资表试一试吧!