打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 查看!

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

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宏啦!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
录制宏得代码--高级筛选
VBA经验小结
ChatGPT写段VBA代码汇集多表不在话下,但......
VBA:按照表中的一列的名称拆分出独立的表
Excel Cells(Rows.Count,1).End(xlUp).Row的含义
Excel VBA工作表 7.8 单个工作薄所有工作表数据合并 数据规则100+都不怕
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服