在工作中,我们经常遇到多张工作表合并到一张工作表的问题,比如希望将图1所示中各分表中保存的成绩记录,汇总到工作簿中的"成绩表"工作表中,可以用图2下面的程序。

图1 七(3)班工作表中的成绩记录

图2 汇总结果
Sub hebing()'把各班成绩表中的记录合并到"成绩表"工作表中Dim sht As WorksheetSet sht = Worksheets("成绩表")sht.Rows("2:" & sht.rows.count).Clear '删除成绩表中的原有记录Dim wt As Worksheet, xrow As Integer, rng As RangeFor Each wt In Worksheets '循环处理工作簿中的每张工作表If wt.Name <> "成绩表" ThenSet rng = sht.Range("A1048576").End(xlUp).Offset(1, 0)xrow = wt.Range("A1").CurrentRegion.Rows.Count - 1wt.Range("A2").Resize(xrow, 7).Copy rngEnd IfNextEnd Sub
第4行代码意思是将"成绩表"工作表赋值给sht对象,在VBA中,给对象赋值,前面必须加Set关键字。
第5行代码中的sht.rows.count表示sht工作表总共有多少行;在VBA中,Rows表示工作表或某个区域中所有行组成的集合。Rows("2:3")表示选中工作表的第2行到第3行。
第7行代码中的wt代表工作表集合中的一个工作表,随着循环变换。
第9行代码表示wt工作表中数据A列下面的第一个空单元格。Range("A1048576")表示工作表最下面一个单元格。
Range对象的End属性返回包含指定单元格的区域最尾端的单元格,返回结果等同于在单元格中按【End+方向键】(上、下、左、右方向键)组合键得到的单元格。
Range对象的Offset属性获得相对于安远隔区域一定偏移位置上的单元格区域。Offset(1, 0)表示单元格下面一个单元格。
第10行表示A1单元格所在当前区域的行数减1。
第11行表示将子表中的数据复制到汇总表的空白区域。
Range对象的Resize属性将指定的单元格区域有目的地扩大或缩小,得到一个新的单元格区域。Range("B2").Resize(5,4).Select表示将B2单元格扩展为一个5行4列的单元格区域。
微信公众号:VBA168
淘宝店铺地址:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-21233576391.4.1af0683dzrx3oU&id=584940166162
关注微信公众号,每天及时接收Excel VBA经典示例讲解。
淘宝店铺提供Excel定制服务。
祝你工作和学习更轻松!
1141




被折叠的 条评论
为什么被折叠?



