excel宏代码编写教程(0基础学习写一个多表汇总宏模板)


今天我们带大家一起来实现一下VBA多表汇总,逐句讲解+分析思路,如果你是0基础,听完起码知道如何修改代码,也就非常奈斯了!


我们说的是多表指的是多工作表(WorkSheet或者Sheet)


需求:汇总1-3月数据到汇总表



需求分析:


我们程序做的其实就是模仿人工做的,把人工处理的逻辑转成程序可以认识的语句,所以我们首先要分析一下人工是如何处理的!


人工处理非常简单,分两步:


步骤01 :复制数据

复制数据,我们人工复制非常简单,因为你知道什么地方是有效数据区域,开始和结束位置,你是怎么判断的呢?你说有内容的最后一行就是结束位置呀,那么这个就要转成Excel能认识的VBA语句!


步骤02 :粘贴数据

粘贴数据,我们人工粘贴也是无感的,反正就是贴,但是你贴的时候也不是随意贴的,你接着上次粘贴内容的最后一行空白行粘贴的,这个最后一行有内容的行号的下一个空白,我们要转成语句,问题也就解决了!


本文由“壹伴编辑器”提供技术支持

根据我们分析人工操作下来,我们核心就是要知道如何表示数据的最后一行!


这个VBA有自己的规则:

Cells(Rows.Count,1).End(xlup).Row

以上表示,从A列(其他列把1修改成对应的列即可)的最后一个单元格往上找,找到首个有内容的单元格,并获取行号(ROW),这个跟我们自己手动啊


知识点:

Cells(行,列) - 单元格的一种表示方法,列可以使用字母表示

Cells(1,2) 和 Cells(1,"B") 都表示第一行第二列交叉的单元格-B1


虽然这些都有了,但是我一个小白,还是不知道怎么做呀?


这个是否,就要说Excel做的好的地方了,录制宏



动画演示:如何录制宏


如果没有看到开发工具,按下面步骤操作一下即可。

【文件】 - 【选项】- 【自定义功能区】 - 【开发工具】 勾上 确定即可!




动画演示:查看录制的宏


查看宏的方式有很多,除了上面的点击【Visual Basic】 还可以 右击任意工作表名称,选择 【查看代码】 或者按下 ALT+F11 查看!






excel 宏教程

我们来看一下录制宏的代码:


Sub 多表汇总() ' ' 多表汇总 宏 ' '     Range("A1:G10").Select     Selection.Copy     Sheets("汇总表").Select     Range("A1").Select     ActiveSheet.Paste     Columns("B:B").EntireColumn.AutoFit     Range("D6").Select End Sub



知识点:


1、如何在VBA中做一些说明注释

单引号的部分(' 多表汇总 宏),表示注释,也就是对程序或者内容做一些补充说明,对程序本身没有影响


2、VBA中如何表示单元格

我们的每个动作都被录制下来,后续还可以反复运行!

出现比较多的就是单元格的操作,那么单元格怎么表示呢?

单元格表示:Range("单元格地址")

这个是单元格的一种表示方式,但是不是唯一的,以后大家会慢慢接触到其他表示方式!Select 就是因为意思,选择!Copy就是复制,上面就是选择了A1:G10,然后复制,最后粘贴到,粘贴我们要切换报,这里就会涉及到VBA中如何表示工作表?


3、VBA中工作表的表示方式


这个 Sheets("汇总表").Select 就表示选择了名称为汇总表的工作表,那么你也应该可以猜出表示方式了!

工作表表示方式:Sheets("工作表名称")


4、常用的几个单词


  • Range:表示单元格
  • Sheets:表示工作表
  • Copy:复制
  • Select:选择
  • Paste:粘贴


有了上面的基础,下面我们就来看看如何修改代码

本文由“壹伴编辑器”提供技术支持

如何修改代码,实现多表汇总?


1、指定复制的是哪个表,使用Sheets,A1:G10 这个10不是固定的,我们要使用 cells(rows.count,1).End(xlup).row 的方式来处理一下!

比如我们要复制1月份的数据,那么应该是这样的


Sheets("1月").Range("A1:G"&Sheets("1月").Cells(Rows.count,1).End(xlup).row)


Sheets("1月").Cells(Rows.count,1).End(xlup).Row:表示根据1月份A列从下往上找到首个有内容的单元格的行号!


你会发现上面写得太长了,这个是否,我们可以找个东西,帮我们存储一下,给这个东西起个简短的名字,以后就可以使用这个来代替这串长的内容了


其实这个东西就叫做 变量,以后慢慢来学习


这样我们就解决了如何准确地复制内容,下面是确定每次粘贴的位置,第一次可能直接粘贴到A1,第二次呢?上次粘贴后一行空白行


这个同样可以使用Cells(Rows.count,1).End(xlup).Row 来处理!

我们MaxRow,来表示汇总表中有数据的下一个空白行

MaxRow = Sheets("汇总表").Cells(Rows.Count, 1).End(xlUp).Row+1

这样我们就完成了一次复制粘贴,下面要解决的就是多次复制粘贴问题


当然你可以复制上面的内容,反复粘贴,但是显然那样是毫无意义的!


这个事情,是不是循环在处理,在VBA中,我们使用


For 变量 = 开始 to 结束   干点啥 Next

来表示循环执行


工作表不仅可以通过名称来表示,也可以按照顺序表示,比如Sheets(1)就表示第一张表!还有就是Excel大部分Select选择的代码都可以去掉,直接对象.操作即可


所以我们的代码可以修改为



好像差不多了,我们好像还没说怎么运行?


其实很简单,在代码窗口,按一下F5即可,当然也有界面操作,【运行】 - 【运行子过程】


▼ 动画演示-如何执行代码



虽有瑕疵,但是我们成功地把3个月的数据合并到汇总表中了!这些瑕疵,随着我们不断深入地去学习,慢慢都会解决!


下面不是本次的重点,上面学会就挺好的了!


1、修复标题粘贴问题

首次粘贴的位置为A1,且粘贴标题,其他都从第二行复制内容粘贴


2、复制粘贴内容可以一句完成


以上我们就需要使用判断语句IF来处理,今天我们适当看一下,知道这么回事即可!


这样我们就做出一个完全可以实现多表汇总的宏了!


有的同学说了,你这里就3个表,实现情况并不是这样,我可能有多个,具体几个我不知道,那怎么办呢? 一来你知道个数可以直接修改

i = 2 To 4(修改为实际的表个数)


当然这个不够智能,所以我们需要一个方法来获取工作做的数量,这个简单


共有多少个工作表:Sheets.Count


简单修改一下,我们可以应付任意多个表合并了!

Sub 多表汇总() ' 多表汇总 宏          '从第2行表到第4张表(1月-3月)     For i = 2 To Sheets.Count         If i = 2 Then             iStartRow = 1   '首次从A1复制             MaxRow = 1 '首次粘贴到汇总表A1         Else             iStartRow = 2   '否则从跳过标题,从第二行开始             '汇总表中有数据的下一行             MaxRow = Sheets("汇总表").Cells(Rows.Count, 1).End(xlUp).Row + 1         End If                  '用IROW 代码这一串内容         iRow = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row                  Sheets(i).Range("A" & iStartRow & ":G" & iRow).Copy _         Sheets("汇总表").Range("A" & MaxRow)     Next End Sub



▼ 修改后的代码汇总演示


这样你就自己制作了一个可以实现多表汇总的VBA宏啦!

使用控件等方式运行代码推荐阅读:Excel中运行VBA(宏)代码的方法!


功能虽然简单实现了,但是还是有些东西没有考虑,还可以慢慢完善,比如:

1、每次汇总前删除汇总表数据,确保数据最新!

2、我要汇总的表,并不是第二个开始的全部

3、我要汇总的是指定表名的多个或者按照名称规则等等

4、汇总好,能不能给个提示,告诉我汇总了几个,是否都汇总了等等

5、为了简洁,上面的变量都没有申明等等问题!



VBA的东西很多,非一篇文章可以说尽,如果你感兴趣,那就就学起来吧!

Excel办公实战 分享与Excel相关的知识,以实战为主; 函数、VBA、图表、Power Query、技巧、Python爬虫等 667篇原创内容

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友