除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/366.html,VBA交流群273624828。
这节继续来看一个汇总多个工作表的例子,要汇总的工作表见附件。一个工作簿中有多个相同格式的工作表,每个工作表都有一段表头,包括日期、编号、车号等不同的信息,之后是多条数据,现在我们要将这些数据部分汇总,同时还要提取各个表的日期、编号和车号等信息。下面分别是原表和汇总表的格式


解决这个问题要分两部分,一部分是要取到正文的数据,另一部分是要取到表头的数据。下面来看代码
Sub 汇总() Dim sht, arr, x, n, i, brr, brr1 Sheets("每车合计").UsedRange.Offset(1, 0).ClearContents For Each sht In Sheets '对每个表进行遍历 If sht.Name <> "每车合计" Then With sht x = Sheets("每车合计").Range("D65536").End(xlUp).Row + 1 '汇总表的最后一行 n = .[a13].End(xlDown).Row '数据表的最后一行 If .Range("A" & n) = "合计" Then '把合计行去掉 n = n - 1 End If brr1 = .Range("A13:G" & n) '数据表的数据放到数组brr1中 Sheets("每车合计").Range("D" & x).Resize(n - 12, 7) = brr1 '粘贴到汇总表中 arr = sht.Range("A1:G6") '表头放到arr中 ReDim brr(1 To n - 12, 1 To 3) '取表头相应内容放到Brr中 For i = 1 To n - 12 brr(i, 1) = Split(arr(6, 1), ":")(1) brr(i, 2) = Split(arr(1, 6), ":")(1) brr(i, 3) = Split(arr(6, 6), ":")(1) Next ' For i = x To x + n - 13 ' Sheets("每车合计").Range("A" & i) = Split(arr(6, 1), ":")(1) ' ' Sheets("每车合计").Range("B" & i) = Split(arr(1, 6), ":")(1) ' ' Sheets("每车合计").Range("C" & i) = Split(arr(6, 6), ":")(1)
'Next Sheets("每车合计").Range("A" & x).Resize(n - 12, 3) = brr End With End If Next End Sub
上面的例子中我用了不少的数组,主要目的是为了加快运行的速度,否则直接操作Range对象会很慢很慢。
本节示例文件下载地址:http://pan.baidu.com/s/1i3BW3kT。
|