文章评分
次,平均分 :
有时我们会遇到一些麻烦的事情,比如合并多个工作表,或者是多个工作薄。
如果只是三五个,简单的重复几次“复制+粘贴”还是能接受的,但是如果有30个,甚至是 300 个呢?
客观来说,手动合并难度不大,但是工作量不小,更为关键的是容易出错。
小编就曾经遇到过这种情况:要将 300 多天的客流数据汇总,然后这300多天的数据是一天一张工作表。
小编本身就比较懒,看到这 300 多张表,立马就打开了搜索引擎……最终通过强大的网友和强大的 VBA 轻松解决了这个问题。
今天整理材料,偶然发现了当时记录的相关笔记,遂拿出来分享:
合并工作表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub 合并当前工作薄中所有工作表() Dim m As Integer Dim n As Integer Dim o As Integer //Dim sheetCount As Integer //sheetCount = ThisWorkbook.Sheets.Count //For m = 1 To sheetCount For m = 1 To 30 '此处的30需要根据你实际的工作表数填写' n = Sheets(m).[a65536].End(xlUp).Row o = Sheets(1).[a65536].End(xlUp).Row Sheets(m).Select Range("a1", "z" & n).Select Range("a" & n).Activate Selection.Copy Sheets(1).Select Range("a" & o + 1).Select ActiveSheet.Paste Next End Sub |
合并工作簿
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, AWbName Dim Wb As workbook, WbN As String Dim G As Long Dim Num As Long Dim BOX As String Application.ScreenUpdating = False MyPath = ActiveWorkbook.Path MyName = Dir(MyPath & "\" & "*.xls") AWbName = ActiveWorkbook.Name Num = 0 Do While MyName <> "" If MyName <> AWbName Then Set Wb = Workbooks.Open(MyPath & "\" & MyName) Num = Num + 1 With Workbooks(1).ActiveSheet.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4) For G = 1 To Sheets.Count Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1) Next WbN = WbN & Chr(13) & Wb.Name Wb.Close False End With End If MyName = Dir Loop Range("B1").Select Application.ScreenUpdating = True MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示" End Sub |
注:合并工作表的代码已经验证过,合并工作薄的代码尚未验证。
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/use-vba-to-merge-worksheets-and-workbooks/
暂无评论