excel合并多个工作簿中的工作表在同一文件夹中有多个工作簿,其中有一个用于汇总的工作簿,要求将除该汇总工作簿外的其它工作簿中的指定工作表的数据汇总到该汇总工作簿中。
(这个最好用)代码如下:Sub UnionWorksheets()Application.ScreenUpdating = FalseDim lj As StringDim dirname As StringDim nm As Stringlj = ActiveWorkbook.Pathnm = dirname = Dir(lj & "\*.xls*")Cells.ClearDo While dirname <> ""If dirname <> nm ThenWorkbooks.Open Filename:=lj & "\" & dirnameWorkbooks(nm).Activate'复制新打开工作簿的第一个工作表的已用区域到当前工作表Workbooks(dirname).Sheets(1).UsedRange.Copy _Range("A65536").End(xlUp).Offset(1, 0)'sheets(1) 中的1为工作表顺序号Workbooks(dirname).Close FalseEnd Ifdirname = DirLoopEnd Sub可以将指定目录下的excel工作簿中的指定表!汇总到一起!例如!将book1.xlsx中的sheet1。
book2.xlsx中的sheet1。
book3.xlsx中的sheet1。
book4.xlsx中的sheet1。
~~~~~~~~~~合并到book汇总.xlsx中的sheet1中如果你的建议是复制~~粘贴~就算了!这个我知道如何使用!如果提供宏的朋友可以加入详细说明,以便我学习,我将酌情加分!谢谢!最佳答案Sub Macro1()Dim lj$, dirname$, nm$, wb As Workbook, sh As Worksheet, a, bSet wb = ThisWorkbooka = Array(0, 2, 1)b = Array(0, -1, 0)lj = ThisWorkbook.Pathnm = dirname = Dir(lj & "\*.xls")Application.ScreenUpdating = FalseFor Each sh In SheetsedRange.Offset(3, 0).ClearNextDo While dirname <> ""If dirname <> nm ThenWith GetObject(lj & "\" & dirname)For i = 1 To 2If IsSheetEmpty = IsEmpty(.Sheets(i).UsedRange) Then _.Sheets(i).UsedRange.Offset(3, 0).Copy wb.Sheets(.Sheets(i).Name).Cells(65536, a(i)).End(xlUp).Offset(1, b(i))Next.Close FalseEnd WithEnd Ifdirname = DirLoopDim UserSheet As WorksheetSet UserSheet = ActiveSheetDim TopRow As LongDim LeftCol As IntegerTopRow = ActiveWindow.ScrollRowLeftCol = ActiveWindow.ScrollColumnDim LastRow As Long, R As LongLastRow = edRange.Rows.Count + edRange.Row - 1Application.ScreenUpdating = FalseFor R = LastRow To 1 Step -1If WorksheetFunction.CountA(Rows(R)) = 0 Then Rows(R).DeleteEnd IfNext RUserSheet.ActivateActiveWindow.ScrollRow = TopRowActiveWindow.ScrollColumn = LeftColApplication.ScreenUpdating = TrueMsgBox "工作表合并已经完毕", "0", "提示"End SubSub 合并当前目录下所有工作簿的全部工作表()Dim MyPath, MyName, AWbNameDim Wb As Workbook, WbN As StringDim G As LongDim Num As LongDim BOX As StringApplication.ScreenUpdating = FalseMyPath = ActiveWorkbook.PathMyName = Dir(MyPath & "\" & "*.xls")AWbName = Num = 0Do While MyName <> ""If MyName <> AWbName ThenSet Wb = Workbooks.Open(MyPath & "\" & MyName)Num = Num + 1With Workbooks(1).ActiveSheet.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)For G = 1 To Sheets.CountWb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)NextWbN = WbN & Chr(13) & Wb.Close FalseEnd WithEnd IfMyName = DirLoopRange("B1").SelectApplication.ScreenUpdating = TrueMsgBox "共合并了" & Num & "个工作薄下的全部工作表。
如下:" & Chr(13) & WbN, vbInformation, "提示"End Sub使用VBA合并多个Excel工作簿例如,需要将多个Excel工作簿中的工作表合并到一个工作簿。
这里假设需要合并的工作簿在“D:\示例\数据记录\”文件夹中,含有两个工作簿test1.xls、test2.xls(当然,可以不限于两个),在test1.xls工作簿中含有三张工作表,在test2.xls工作簿中含有两张工作表,现在使用一段VBA代码合并这两个工作簿到一个新工作簿中,合并到新工作簿中的工作表分别以原工作簿名加索引值命名。
代码如下:Sub CombineWorkbooks()Dim strFileName As StringDim wb As WorkbookDim ws As Object'包含工作簿的文件夹,可根据实际修改Const strFileDir As String = "D:\示例\数据记录\"Application.ScreenUpdating = FalseSet wb = Workbooks.Add(xlWorksheet)strFileName = Dir(strFileDir & "*.xls*")Do While strFileName <> vbNullStringDim wbOrig As WorkbookSet wbOrig = Workbooks.Open(Filename:=strFileDir & strFileName, ReadOnly:=True)strFileName = Left(Left(strFileName, Len(strFileName) - 4), 29)For Each ws In wbOrig.Sheetsws.Copy After:=wb.Sheets(wb.Sheets.Count)If wbOrig.Sheets.Count > 1 Thenwb.Sheets(wb.Sheets.Count).Name = strFileName & ws.IndexElsewb.Sheets(wb.Sheets.Count).Name = strFileNameEnd IfNextwbOrig.Close SaveChanges:=FalsestrFileName = DirLoopApplication.DisplayAlerts = Falsewb.Sheets(1).DeleteApplication.DisplayAlerts = TrueApplication.ScreenUpdating = TrueSet wb = NothingEnd Sub下面是合并多个Excel工作簿的另一种情形,也是《Excel VBA实战技巧精粹》中<技巧91:汇总多个工作簿的工作表>所介绍的方法,即合并汇总。
有四个工作簿,分别为:汇总工作簿.xls、一月.xls、二月.xls、三月.xls,其中一月.xls、二月.xls、三月.xls均只含有一张工作表且工作表中的数据均自单元格A1开始,现在要求将它们合并至“汇总工作簿.xls”中。
在“汇总工作簿.xls”中打开VBE,并输入下列代码:Sub ConsolidateWorkbook()Dim RangeArray() As StringDim bk As WorkbookDim sht As WorksheetDim WbCount As IntegerWbCount = Workbooks.CountReDim RangeArray(1 To WbCount - 1)For Each bk In Workbooks '在所有工作簿中循环If Not bk Is ThisWorkbook Then '非代码所在工作簿Set sht = bk.Worksheets(1) '引用工作簿的第一个工作表i = i + 1RangeArray(i) = "'[" & & "]" & & "'!" & _sht.Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1) End IfNextWorksheets(1).Range("A1").Consolidate _RangeArray, xlSum, True, TrueEnd Sub。