vba把多个表汇总到一起(vba汇总多个工作表指定区域)
一、情况
某公司有全国不同城市的人员销售数据,该数据为员工姓名、工号、销售数量以及销售金额,每一个城市一个工作表,年底了,老板叫你,把全国的数据按不同城市的销售数据都汇总到一个表格中,方便查阅分析。
全国不同城市的销售数据
二、最终效果
在一个汇总的工作表中,表头为城市、销售数量和销售金额,汇总数据分别按每一个sheet的合计数来汇总,在城市这一列中分别为每一个工作表的名称,如北京,销售数量、销售金额为工作表名称为北京的销售数量、销售金额的合计数
最终数据汇总效果图
三、思路分析
①首先对数据表进行特征分析,其存在的特征如下:
1.表头一致:都是城市、销售数量、销售金额
2.最后一行为合计行:销售数量和销售金额的合计数在最后一行
3.每个工作表的数据行数不一样
②汇总方法选择
传统的Excel技巧和函数已经不能够满足本次汇总的需要,复制粘贴不用想,效率低下,且工作量大;如果要追求效率,应该选择VBA编程方法!
③编程思路分析
1.“城市”列:为工作表名称,用for循环然后调用sheet.name即可
2.“销售数量”/“销售金额”列:获取合计数,也就是该列的最后一个非空单元格,可以运用Range("C65536").End(xlUp)方式
四、教程方法
1.打开上述表格,新建一个名称为“汇总”的工作表作为汇总
2.快捷键Alt F11打开VBA编辑器
3.插入—模块—复制如下代码—运行代码
Sub 一键汇总数据() Dim i, x As Integer For i = 2 To Sheets.Count Cells(i, 1) = Sheets(i).Name x = Sheets(i).Range("C65536").End(xlUp).Row Cells(i, 2) = Sheets(i).Cells(x, 3) Cells(i, 3) = Sheets(i).Cells(x, 4) Next End Sub
五、代码解释
Dim i, x As Integer【定义两个整形变量,i用于工作表数量计数,x用于获取某列最后一个非空单元格】
For i = 2 To Sheets.Count 【for循环,遍历所有工作表(除了汇总之外)】
Cells(i, 1) = Sheets(i).Name【获取工作表名称】
x = Sheets(i).Range("C65536").End(xlUp).Row【找到最后一个非空单元格的行号并复制给x】
Cells(i, 2) = Sheets(i).Cells(x, 3)【获取销售数量的合计数】
Cells(i, 3) = Sheets(i).Cells(x, 4)【获取销售金额的合计数】
Next 【结束循环】
六、总结
本案例只列举了数十个工作表,但是上百个的工作表数据汇总原理一样,工作表的数量不影响,大家可以自己新建多个工作表,然后生成一些模拟数据来操作一下。不要再复制粘贴了,会手软的哈,希望此文能够帮到那些经常需要统计数据的苦力吧!
更多的Office技巧请继续关注头条号:恒哥说Office,持续为你分享Word、Excel、PPT等软件操作!让你工作效率6到飞起!