这个表我刚刚不是已经复制了吗?
啊呀,这两个表长得太像,我又粘错了。
粘了一下午,忘记保存,得了,全部重来吧。
我刚刚的汇总数据到哪去了?怎么找不到了呢?
……
大家在工作中有没有因为要统计数据而遇到过上面的这些问题呢?
面对月度、季度、年度各种各样的表单数据,一次次重复着复制粘贴操作的你,是否觉得人生无趣呢?
今天,我们将会带领大家,一键汇总。
那么如何实现呢?下面就给大家一步步讲解。
1、新建-汇总表
首先,我们在Excel中创建一个Sheet,将其命名为“汇总表”。
汇总表用于存放我们需要汇总的所有表单数据。
然后,右击汇总表,查看代码,进入VBE界面。
双击Sheet3(汇总表) ,进入代码窗口。
2、核心-For
我们这个功能的核心,就是要让系统代替我们,自动把所有的表单都看一遍,然后再帮助我们复制粘贴。
那么,怎么让系统把所有的表单都看一遍呢?这时我们就需要用到之前学过的For循环语句了。(对于For循环不太了解的朋友,可以下面查看这篇文章)
数据大作手:VBA-从一而终For循环zhuanlan.zhihu.com对应代码如下:
For i=1 to Sheets.Count
Sheet,是一种对象,意思是表单,即我们常看到的Sheet1,Sheet2……
Count是对象Sheet的一种属性,表示对象的个数。
这里的Sheets.Count,指的就是表单的数目。
(对于“对象”和“属性”概念不太清楚的朋友,可以查看这篇文章)
数据大作手:写VBA代码前你所需要掌握的概念(上)zhuanlan.zhihu.comFor i=1 to Sheets.Count 这句代码,就是从第一张Sheet开始,循环到最后一张Sheet.
3、判断-If
接着,我们需要让系统把汇总表和其他表单区别开来。
如果当前的表单不是汇总表,就把表单的内容复制粘贴到汇总表;
如果当前的表单是汇总表,就不做任何操作。
(对于If 判断不太了解的朋友,可以查看这篇文章。)
数据大作手:系统居然向我自动问好?2个小技巧轻松实现zhuanlan.zhihu.com对应代码如下:
If Sheets(i).Name <> "汇总表"
Then ……
End If
Sheet,是一种对象,意思是表单,上面我们介绍过了。
Count是对象Sheet的一种属性,表示对象的名称。
Sheets(i).Name就是第i张表单的名称。
<>是不等于的意思,相当于数学里的不等号≠。
4、操作-宏
接下来,我们怎么把其他表单里的数据粘贴到汇总表里呢?
我们主要通过录制宏的方式实现该功能。(对于录制宏不太了解的朋友,可以查看这篇文章。)
数据大作手:高效学习VBA的4大技巧,打破从入门到放弃的循环zhuanlan.zhihu.com下图是录制宏的示例操作。
在这里,我们还需要知道每个Sheet表的数据源大小。
通过以下代码实现:
j = Sheets(i).Range("A65536").End(xlUp).Row + 1'取每张表的最后一行的值。
Sheets(i).Range("A2:M" & j).Copy'复制每张表的数据,第一行是标题,不需要复制进去。
这里的Range是一种对象,意思是单元格区域。
代码中的其他内容,我们会在之后的学习过程中进行具体讲解。
5、调用
代码编辑好之后,我们该如何调用它呢?
我们在"开发工具"-"插入"中,选择"按钮控件"。
在汇总表上,进行拖动,画出一个按钮。
双击按钮,在弹出的对话框中,选择刚才建立的VBA代码,即"Sheet3_汇总表",实现
代码的调用。
6、运行
最终的运行情况如下图所示。
相应的代码如下:
Sub 汇总表()
Dim i, X, j As Integer
For i = 1 To Sheets.Count
If Sheets(i).Name <> "汇总表" Then
j = Sheets(i).Range("A65536").End(xlUp).Row
Sheets(i).Range("A2:M" & j).Copy
X = Sheets("汇总表").Range("A65536").End(xlUp).Row + 1
Sheets("汇总表").Range("A" & X).Select
ActiveSheet.Paste
End If
Next
End Sub
本篇栗子涵盖了之前学习的内容,相对来说比较综合,大家可以多练习下。
看完三件事:
1.点赞,让更多的人也能看到这篇文章(收藏不点赞,都是耍流氓)
2.关注我和我的专栏,让我们共同成长
3.关注公众号"数据大作手",定期分享数据分析方面的干货
感谢你的支持!