Note: The other languages of the website are Google-translated. Back to English
English English

如何在Excel中將多個工作簿合併為一個主工作簿?

當您必須在Excel中將多個工作簿組合成一個主工作簿時,您是否曾經被困住過? 最可怕的是,您需要組合的工作簿包含多個工作表。 以及如何僅將多個工作簿的指定工作表合併到一個工作簿中? 本教程演示了幾種有用的方法來幫助您逐步解決問題。


通過移動或複制功能將多個工作簿合併為一個工作簿

如果僅需要合併幾個工作簿,則可以使用“移動”或“複製”命令將工作表從原始工作簿手動移動或複製到主工作簿。

1.打開工作簿,您將這些工作簿合併為主工作簿。

2.在原始工作簿中選擇要移動或複製到主工作簿的工作表。

筆記:

1)。 您可以選擇多個不相鄰的工作表,同時按住 按Ctrl 鍵並一一點擊工作表標籤。

2)。 要選擇多個相鄰的工作表,請單擊第一個工作表標籤,按住 轉移 鍵,然後單擊最後一個工作表標籤以將其全部選中。

3)。 您可以右鍵單擊任何工作表標籤,然後單擊 選擇所有工作表 從上下文菜單中選擇同時在工作簿中的所有工作表。

3.選擇所需的工作表後,右鍵單擊“工作表”選項卡,然後單擊“確定”。 移動或複制 從上下文菜單中。 看截圖:

4.然後 移動或複制 對話框彈出 預訂 下拉菜單中,選擇要移動或複制工作表的主工作簿。 選擇移動以結束 前表 框,選中 建立副本 框,最後單擊 OK 按鈕。

然後,您可以在兩個工作簿中將工作表合併為一個。 請重複上述步驟,將工作表從其他工作簿移至主工作簿。


使用VBA將多個工作簿或指定的工作簿表合併為主工作簿

如果需要將多個工作簿合併為一個,則可以應用以下VBA代碼來快速實現它。 請執行以下操作。

1.將要合併的所有工作簿放在同一目錄下。

2.啟動一個Excel文件(此工作簿將成為主工作簿)。

3。 按 其他 + F11 鍵打開 適用於應用程序的Microsoft Visual Basic 窗口。 在裡面 適用於應用程序的Microsoft Visual Basic 窗口中,單擊 插入 > 模塊,然後將以下VBA代碼複製到“模塊”窗口中。

VBA代碼1:將多個Excel工作簿合併為一個

Sub GetSheets()
'Updated by Extendoffice 2019/2/20
Path = "C:\Users\dt\Desktop\dt kte\"
Filename = Dir(Path & "*.xlsx")
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each Sheet In ActiveWorkbook.Sheets
     Sheet.Copy After:=ThisWorkbook.Sheets(1)
  Next Sheet
     Workbooks(Filename).Close
     Filename = Dir()
  Loop
End Sub
	

筆記:

1.上面的VBA代碼在合併後將保留原始工作簿的圖紙名稱。

2.如果您想區分主工作簿中的哪些工作表是合併後來自何處,請應用下面的VBA代碼2。

3.如果您只想將工作簿的指定工作表合併到主工作簿中,則下面的VBA代碼3可以提供幫助。

在VBA代碼中,“C:\ Users \ DT168 \ Desktop \ KTE \”是文件夾路徑。 在VBA代碼3中,Sheet1,Sheet3”是您將合併到主工作簿的工作簿的指定工作表。您可以根據需要進行更改。

VBA代碼2:將工作簿合併為一個(每個工作表將以其原始文件名的前綴命名):

Sub MergeWorkbooks()
'Updated by Extendoffice 2019/2/20
Dim xStrPath As String
Dim xStrFName As String
Dim xWS As Worksheet
Dim xMWS As Worksheet
Dim xTWB As Workbook
Dim xStrAWBName As String
On Error Resume Next
xStrPath = "C:\Users\DT168\Desktop\KTE\"
xStrFName = Dir(xStrPath & "*.xlsx")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xTWB = ThisWorkbook
Do While Len(xStrFName) > 0
    Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
    xStrAWBName = ActiveWorkbook.Name
    For Each xWS In ActiveWorkbook.Sheets
    xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
    Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
    xMWS.Name = xStrAWBName & "(" & xMWS.Name & ")"
    Next xWS
    Workbooks(xStrAWBName).Close
    xStrFName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

VBA代碼3:將工作簿的指定工作表合併到主工作簿中:

Sub MergeSheets2()
'Updated by Extendoffice 2019/2/20
Dim xStrPath As String
Dim xStrFName As String
Dim xWS As Worksheet
Dim xMWS As Worksheet
Dim xTWB As Workbook
Dim xStrAWBName As String
Dim xI As Integer
On Error Resume Next

xStrPath = " C:\Users\DT168\Desktop\KTE\"
xStrName = "Sheet1,Sheet3"

xArr = Split(xStrName, ",")

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xTWB = ThisWorkbook
xStrFName = Dir(xStrPath & "*.xlsx")
Do While Len(xStrFName) > 0
Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
xStrAWBName = ActiveWorkbook.Name
For Each xWS In ActiveWorkbook.Sheets
For xI = 0 To UBound(xArr)
If xWS.Name = xArr(xI) Then
xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.count)
Set xMWS = xTWB.Sheets(xTWB.Sheets.count)
xMWS.Name = xStrAWBName & "(" & xArr(xI) & ")"
Exit For
End If
Next xI
Next xWS
Workbooks(xStrAWBName).Close
xStrFName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

4。 按 F5 鍵來運行代碼。 然後,將某個文件夾中工作簿的所有工作表或指定工作表一次組合到一個主工作簿中。


輕鬆將多個工作簿或指定的工作簿表合併為一個工作簿

幸運的是, 結合 的工作簿實用程序 Excel的Kutools 使將多個工作簿合併為一個更加容易。 讓我們看看如何在組合多個工作簿時使此功能發揮作用。

申請前 Excel的Kutools首先下載並安裝.

1.創建一個新的工作簿,然後單擊 Kutools 加 > 結合。 然後會彈出一個對話框,提醒您所有組合的工作簿都應保存,並且該功能不能應用於受保護的工作簿,請單擊 OK 按鈕。

2。 在裡面 合併工作表 嚮導,選擇 將工作簿中的多個工作表合併到一個工作簿中 選項,然後單擊 下一頁 按鈕。 看截圖:

3。 在裡面 合併工作表-第2步,共3步 對話框中,單擊 加入 > 文件 or 要添加Excel文件,您將合併為一個。 添加Excel文件後,點擊 按鈕,然後選擇一個文件夾來保存主工作簿。 看截圖:

現在,所有工作簿都合併為一個。

與以上兩種方法相比, Excel的Kutools 具有以下優點:

  • 1)所有工作簿和工作表都在對話框中列出;
  • 2)對於要從合併中排除的工作表,只需取消選中它;
  • 3)空白工作表被自動排除;
  • 4)合併後,原始文件名將作為工作表名稱的前綴添加;
  • 有關此功能的更多功能, 請訪問這裡.

  如果您想免費試用該工具(30天), 請點擊下載,然後按照上述步驟進行操作。


Kutools for Excel- 幫助您始終提前完成工作,有更多時間享受生活
您是否經常發現自己正在趕上工作,缺乏時間為自己和家人度過?  Excel的Kutools 可以幫助您處理80%的Excel難題並提高80%的工作效率,讓您有更多時間照顧家人並享受生活。
適用於300種工作場景的1500種高級工具使您的工作比以往更加輕鬆。
從現在起,不再需要記住公式和VBA代碼,讓您的大腦休息一下。
複雜和重複的操作可以在幾秒鐘內完成一次處理。
每天減少成千上萬的鍵盤和鼠標操作,現在告別職業病。
在3分鐘內成為Excel專家,幫助您快速獲得認可並提薪。
110,000名高效人才和300多家世界知名公司的選擇。
使您的$ 39.0的價值超過$ 4000.0的他人培訓。
全功能30天免費試用。 沒有理由的60天退款保證。

按評論排序
留言 (146)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
嗨,請幫助我解決以下情況。 我有不同的工作簿,每個工作簿都有超過 5 個不同路徑的工作表。 我需要將不同工作簿中的所有工作表合併到單個工作簿中。 誰能幫我解決macro.TIA!
網站主持人對此評論進行了最小化
[quote]嗨,請幫我解決以下問題。 我有不同的工作簿,每個工作簿都有超過 5 個不同路徑的工作表。 我需要將不同工作簿中的所有工作表合併到單個工作簿中。 誰能幫我解決macro.TIA!由 A. Karthi[/quote] 請去下載並安裝 Kutools for Excel,你可以快速完成它。 但是如果你想使用VBA,它可能太複雜了。 有關如何完成它的更多信息,請訪問:http://www.extendoffice.com/product/kutools-for-excel/excel-combine-worksheets-into-one.html
網站主持人對此評論進行了最小化
KUTOOLS 很棒的解決方案。 當我創建主工作簿然後工作表的單元格顏色從原始工作表更改時,我需要更多幫助。 我怎樣才能保持它像原始工作表一樣。
網站主持人對此評論進行了最小化
我們的辦公室有來自幾個 excel 原件的重複數據(即姓名、地址、城市、金額、簽名日期),並且嘗試合併這些數據將是一項正在進行的工作。 怎樣才能消除重複工作和重複信息輸入?
網站主持人對此評論進行了最小化
我收到一個“運行時錯誤 1004”,工作表類的複制方法在以下行中失敗:Sheet.Copy After:=ThisWorkbook.Sheets(1)。 我正在使用 Excel 2010。你能幫忙嗎? 謝謝, - 蘇西
網站主持人對此評論進行了最小化
嘿,蘇西,我自己已經在這個問題上工作了一段時間,得到了同樣的錯誤。 檢查該模塊是否是在 PERSONAL 而不是您的活動工作簿下創建的。 一旦我在正確的樹下創建了模塊,下面的代碼就可以正常工作了。 Sub GetSheets_xls() Dim Sheet As Worksheet Path = "C:\Users\yournamehere\Desktop\Testingfolder\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=False Set Sheet = ActiveWorkbook.Sheets(1) Sheet.Copy After:=ThisWorkbook.Sheets(1) 'Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub 希望這有幫助!
網站主持人對此評論進行了最小化
非常感謝。 你的代碼運行良好。
網站主持人對此評論進行了最小化
[quote]我收到“運行時錯誤 1004”,工作表類的複制方法在以下行中失敗:Sheet.Copy After:=ThisWorkbook.Sheets(1)。 我正在使用 Excel 2010。你能幫忙嗎? 謝謝, - 蘇西通過蘇西[/quote] 有同樣的問題,當我去查看並取消隱藏“個人”時,它可以工作,在隱藏主控的情況下訪問這個宏似乎有問題。
網站主持人對此評論進行了最小化
轉到查看並取消隱藏“個人”- 在隱藏主控時執行整個代碼似乎有問題。 您可以將宏設為該工作簿的本地宏,但每次要使用它時都必須重新創建整個內容
網站主持人對此評論進行了最小化
你好! 非常感謝這個文件...... :roll: Best Regard
網站主持人對此評論進行了最小化
嘿偉大的提示。 做過 幾乎 我想要的。 在組合工作簿中,我希望工作表名稱包含原始工作簿的名稱,所以我知道數據來自哪個工作簿。 我正在組合的數據來自不同的檔案。 我必須搜索一個條目,但不知道它在哪個存檔中。因此,通過將所有數據合併到一個文件中,我可以一次搜索所有存檔。 但我仍然需要知道,條目在哪個存檔中。Henrik
網站主持人對此評論進行了最小化
對於包含文件名的代碼,只需執行此操作。 Sub GetSheets() Dim temp As String Path = "C:\Users\..\Desktop\Excel combine\" Filename = Dir(Path & "*.xlsx") Do While Filename "" Workbooks.Open Filename:= Path & Filename, ReadOnly:=True temp = ActiveWorkbook.Name ActiveSheet.Name = temp ActiveWorkbook.Sheets(temp).Copy After:=ThisWorkbook.Sheets(1) Workbooks(Filename).Close Filename = Dir() Loop End Sub Note :這是只複製第一張,它可以tweeked做所有的表
網站主持人對此評論進行了最小化
如何合併更多工作表以及如何指定不同的主文件來粘貼所有工作表。
網站主持人對此評論進行了最小化
這確實是一個很好的解決方案。 謝謝你。 但是有一個問題,當我像這樣執行它時,excel會詢問我是否要在關閉之前保存更改(因為名稱已更改),並且我不想為每個文件都執行此操作(每次執行大約 32 個)。 有沒有辦法解決這個問題?
網站主持人對此評論進行了最小化
這太棒了:lol: 幫了我很多....
網站主持人對此評論進行了最小化
謝謝夥伴,你從這個非常有用的網站度過了我的一天...實際上我也想將不同工作表的相同標題數據合併到一個主工作表中,Excel 的 KUTOOL 幫助了我很多......再次感謝你.... :)
網站主持人對此評論進行了最小化
非常感謝您提供的寶貴信息。 這真的有效。 本文中列出的步驟確實使我的工作變得更輕鬆。 謝謝, 迪內甚
網站主持人對此評論進行了最小化
感謝您分享您的知識
網站主持人對此評論進行了最小化
您如何獲得它來更新原始工作簿中的更改? 我正在嘗試獲得一份國家摘要,讓每個地區將他們的數據輸入到他們自己的工作簿中,然後讓國家摘要從中更新? 我希望在一開始就將其設置為全年,而不是進行回顧性工作。
網站主持人對此評論進行了最小化
將工作表合併到一個工作簿中後,如何保存它我無法保存它被命名為 Book1,我點擊保存或另存為但不工作。有什麼建議嗎?
網站主持人對此評論進行了最小化
我按照“使用 VBA 將多個工作簿合併到一個工作簿”中的步驟操作,然後單擊“運行”,沒有任何反應。 我不知道錯誤,不知道如何更正。 你能幫我嗎? 以下是我在新工作簿中輸入的代碼。 謝謝 Sub GetSheets() Path = "p:\download\macro\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True For Each Sheet in ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub
網站主持人對此評論進行了最小化
尊敬的先生/女士: 我按照“使用 VBA 將多個工作簿合併為一個工作簿”的步驟設置了以下模塊,但沒有任何反應。 你能幫我找出問題嗎? 謝謝 Sub GetSheets() Path = "p:\download\macro\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True For Each ActiveWorkbook.Sheets 中的工作表 Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub
網站主持人對此評論進行了最小化
對於較新版本的 excel,試試這個。 我將打開的工作簿保存為目錄,所有文件都在 c:\temp 中。 Sub GetSheets() Path = "c:\temp\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 對於 ActiveWorkbook 中的每個工作表。 Sheets Sheet.Copy After:=Workbooks("catalog.xlsx").Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub
網站主持人對此評論進行了最小化
試試這個更新版本的 excel。 我將工作簿保存為目錄,所有文件都在 c:\temp 中。 Sub GetSheets() Path = "c:\temp\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 對於 ActiveWorkbook 中的每個工作表。 Sheets Sheet.Copy After:=Workbooks("catalog.xlsx").Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub
網站主持人對此評論進行了最小化
[quote] 嘗試更新版本的 excel。 我將工作簿保存為目錄,所有文件都在 c:\temp 中。 Sub GetSheets() Path = "c:\temp\" Filename = Dir(Path & "*.xls") Do While Filename "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 對於 ActiveWorkbook 中的每個工作表。 Sheets Sheet.Copy After:=Workbooks("catalog.xlsx").Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop End Sub戴夫[/quote] 我不斷收到關於路徑的“無法分配給只讀屬性”...有什麼想法嗎?
網站主持人對此評論進行了最小化
我也有這個問題。 你想清楚了嗎?
網站主持人對此評論進行了最小化
還沒有...尚未找到任何解決方案或有人提出修復建議。 對不起...
網站主持人對此評論進行了最小化
我也是。 這是 6 個月前的工作,這是我最後一次運行它。 有人找到解決方案了嗎? 如果您之前運行過它,現在它無法運行,這可能與 Microsoft 的更新有關嗎? 這對我的任務來說非常方便,可以節省大量時間。 有什麼改變會導致 Excel 突然開始顯示此消息? 作為 VBA 的新手,我不知道從哪裡開始分析邏輯。 親切的問候,格雷格。 格拉斯哥,蘇格蘭。
網站主持人對此評論進行了最小化
似乎“路徑”現在已保留,因此請使用任何其他名稱並替換“路徑”,例如“Mypath”。
網站主持人對此評論進行了最小化
也許您應該將 ReadOnly:=True 更改為 ReadOnly:=False,我已經完成了,這很有幫助
網站主持人對此評論進行了最小化
我一直在尋找這些方面的東西,但想發表評論。 Do While 文件名“”不需要是“”以外的東西嗎? 還是我讀錯了? 也許 Do While NOT filename = "" 只是一個想法......
網站主持人對此評論進行了最小化
我想將所有表格合併到一張標題常見的表格中......請幫助
網站主持人對此評論進行了最小化
嗨,我嘗試使用上述宏來整理幾個文件,不幸的是沒有結果...有人可以幫我擺脫手動整理文件的麻煩。
網站主持人對此評論進行了最小化
我有 112 張 Excel 表格,我想將其放入一張表格中,無需複制和粘貼。 請幫幫我。
網站主持人對此評論進行了最小化
我有一個包含大約 250 Sheet 的工作簿。 我需要一張紙上的柯本。 請給我一個解決方案
網站主持人對此評論進行了最小化
試試這個......我從另一個網站得到這個,但不幸的是我不記得這位女士的名字,所以我很抱歉沒有提到她,我的錯”在 Excel 中合併多個 WB:記住更改 MyPath =!Sub Merge2MultiSheets( ) 將 wbDst 調暗為工作簿 將 wbSrc 調暗為工作簿 將 wsSrc 調暗為工作表 將 MyPath 調暗為字符串 將 strFilename 調暗為字符串 Application.DisplayAlerts = False Application.EnableEvents = False Application.ScreenUpdating = False MyPath = "\\MyPath\etc\etc..."設置 wbDst = Workbooks.Add(xlWBATWorksheet) strFilename = Dir(MyPath & "\*.xls", vbNormal) If Len(strFilename) = 0 Then Exit Sub Do until strFilename = "" Set wbSrc = Workbooks.Open(Filename:= MyPath & "\" & strFilename) Set wsSrc = wbSrc.Worksheets(1) wsSrc.Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count) wbSrc.Close False strFilename = Dir() Loop wbDst.Worksheets(1)。刪除 Application.DisplayAlerts = True Application.EnableEvents = True Application.ScreenUpdating = True End Sub
網站主持人對此評論進行了最小化
嗨,我將代碼添加到模塊中。 將 Excel 書命名為 Masterfile。 我在代碼中的哪個位置添加。 謝謝你
網站主持人對此評論進行了最小化
這些都不適合我,我終於讓這個工作了。 僅供參考,我使用的是 2010 '描述:將文件夾中的所有文件合併到一個主文件中。 Sub MergeFiles() 將路徑作為字符串,ThisWB 作為字符串,lngFilecounter 只要將 wbDest 作為工作簿,shtDest 作為工作表,ws 作為工作表將文件名作為字符串,Wkb 作為工作簿將 CopyRng 作為範圍,Dest 作為範圍將 RowofCopySheet 作為整數 RowofCopySheet = 2 ' 從 ThisWB = ActiveWorkbook.Name path = "mypath ....." 複製的工作表中開始的行 ' 不要忘記更改此 Application.EnableEvents = False Application.ScreenUpdating = False 設置 shtDest = ActiveWorkbook .Sheets(1) Filename = Dir(path & "\*.xls", vbNormal) If Len(Filename) = 0 Then Exit Sub Do until Filename = vbNullString If Not Filename = ThisWB Then Set Wkb = Workbooks.Open(Filename: =path & "\" & Filename) Set CopyRng = Wkb.Sheets(1).Range(Cells(RowofCopySheet, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count)) Set Dest = shtDest.Range("A" & shtDest.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1) CopyRng.Copy Dest Wkb.Close False End If Filename = Dir() Loop Rang e("A1").Select Application.EnableEvents = True Application.ScreenUpdating = True MsgBox "完成!" 結束子
網站主持人對此評論進行了最小化
如何編輯它以使拉入的數據始終從第一行開始? 如果我運行此代碼兩次,它會將數據添加到我之前數據的末尾(從宏的第一次運行開始)。
網站主持人對此評論進行了最小化
更改此行: RowofCopySheet = 2 為 RowofCopySheet = 1
網站主持人對此評論進行了最小化
嗨,我有多個帶有密碼保護的 Excel 文件(單張)不同的文件夾。 我想在一天結束時將所有數據合併到一個主文件中。 每次我必須輸入密碼並打開文件並將粘貼複製到主文件時。請幫助我使用 VBA 代碼。
這裡還沒有評論
載入更多
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點