2017-04-18 72 views
1

是否有一種方法可以將多個Excel電子表格中的數據按列合併在一起?通過列合併多個文檔中的數據的代碼

我有200個電子表格,每個電子表格在前100列(A-CV)中都有。 我想合併這200個文檔中的所有「A」列,所有「B」列合併在一起,所有「C」列合併在一起,等等。

至於合併,不需要特定的順序。只要細胞本身不合並。

由於代碼將會合並大量文本,因此能夠將所有電子表格中的一列一次合併到一個唯一文件中,然後在所有其他列(A- CV),而不是嘗試將所有列(從所有電子表格)合併到一個文件中。

我找到了合併列的代碼,但它不是我所需要的。有沒有辦法修改這段代碼來幫助我上面描述的內容?

Sub Macro1() 
' 
' Macro1 Macro 
' 

    Dim cell As Range 
    For i = 1 To 50 
     Sheets("Sheet1").Select 
     If Cells(1, i).Value = "Cat 2" Then 
     Columns(i).Select 
     Selection.Copy 
     Sheets("Sheet2").Select 
     Range("A1").Select 
     ActiveSheet.Paste 
     End If 
     If Cells(1, i).Value = "Cat 6" Then 
     Columns(i).Select 
     Selection.Copy 
     Sheets("Sheet2").Select 
     Range("B1").Select 
     ActiveSheet.Paste 
     End If 
     If Cells(1, i).Value = "Cat 4" Then 
     Columns(i).Select 
     Selection.Copy 
     Sheets("Sheet2").Select 
     Range("C1").Select 
     ActiveSheet.Paste 
     End If 
    Next i 
End Sub 

如果您需要更多信息,請讓我知道。如果我需要以某種方式重新命名文件以幫助完成此過程,我肯定會願意這樣做。

合併的數據可以發送到電子表格,word文檔或記事本。我對任何這些選項都很好。

更新:這是修改後的新代碼。我遇到的問題在下面的評論中。

Sub copydocument() 
Dim wb As Workbook 
Dim wb1 As Workbook 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
On Error GoTo resetsettings 
Set wb = ThisWorkbook 
MyPath = "C:\Users\HNR\Desktop\A\" 'Path of folder with \ at the end 
MyExtension = "*.xlsx" 
Myfile = Dir(MyPath & MyExtension) 
While Myfile <> vbNullString 
Set wb1 = Workbooks.Open(MyPath & Myfile) 
lr = wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row 
lr1 = wb1.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row 
wb1.Sheets(1).Range("A" & lr1).Copy Destination:=wb.Sheets(1).Range("A" & (lr + 1)) 
wb1.Close 
Myfile = Dir 
Wend 
resetsettings: 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 
+0

每個電子表格中有多少行?你想在新的工作表中並排粘貼相同的列嗎? –

+0

對問題1的回答:每個電子表格都有不同數量的行。我打開了幾個,最高的行數是2500;但是,可能會有一些電子表格。有沒有辦法合併列,然後做一個「排序/過濾器」,使文本的單元格到頂部和那些沒有底部?還是一種只用文本定位單元格的方式,而忽略合併時爲空的單元格? [對以下問題2的回答如下] – IrisRose

+0

對問題2的回答:我想將一個在另一個下面的列粘貼到新的工作表中。並且爲所有列A創建一個工作表,爲所有列B創建另一個工作表等等,這樣我就不必爲所有列創建一個大文檔,因爲這可能會導致我的計算機崩潰。 – IrisRose

回答

1

雖然有很多方法可以做你想做的事,但我會建議看看Power Query。它給你一個很棒的圖形用戶界面來完成這個任務。根據您的Excel版本,它可以是免費的附加組件或已發貨產品的一部分(適用於新版本的Office)。

你不需要知道如何使用這個代碼,你只需要瞭解這些概念。

雖然它並不完全是你在我成功地教過我的工作地點的幾個人之後的答案如何使用此應用程序以前一直依賴於我或VBA技能的其他人。

+0

是的,我查了一下,我的excel包含Power Query。我只在4天前瞭解了編碼,所以我絕對不知道「代碼」,但我會非常感謝您提供的任何幫助。並且耐心等待,我會很樂意跟隨您提供的任何指示。 :) – IrisRose

+0

雖然迭代每個文件的文件夾比我以前在powerQuery中教過的人有點困難,但有一個如何在以下鏈接中執行此操作的示例: http://excelunplugged.com/2016/ 05/28/use-power-querys-get-data-from-folder-to-data-from-multiple-excel-files/ – ClintB

1
Sub copydocument() 
Dim wb As Workbook 
Dim wb1 As Workbook 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
On Error GoTo resetsettings 
Set wb = ThisWorkbook 
MyPath = "c:\Users\foo\" 'Path of folder with \ at the end 
MyExtension = "*.xlsx" 
Myfile = Dir(MyPath & MyExtension) 
While Myfile <> vbNullString 
Set wb1 = Workbooks.Open(MyPath & Myfile) 
lr = wb.Sheets(1).Range("A1:A" & Rows.Count).End(xlUp).Row 
lr1 = wb1.Sheets(1).Range("A1:A" & Rows.Count).End(xlUp).Row 
wb1.Sheets(1).Range("A1:CV" & lr1).Copy Destination:=wb.Sheets(1).Range("A" & (lr + 1)) 
wb1.close 
Myfile = Dir 
Wend 
resetsettings: 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 

該宏將遍歷該文件夾中的所有文件,並複製sheet1範圍並將其粘貼到活動工作簿sheet1中。如果您有標題並且不希望它們重複,則可以將標題複製到activeworkbook的工作表1,然後從(A2:CV & lr1)複製範圍。

+0

更新:謝謝你的代碼。我現在正在嘗試,結果不一。我已將您的代碼放入原始消息中,以便您瞭解我如何應用它。現在,我的代碼工作了一分鐘,它從我指定的文件夾Folder A的所有電子表格中複製了多個A列,但現在它甚至不復制整個列。你能給我指導我可以做些什麼來改進結果嗎?我所做的是將列範圍從「A1:A」更改爲「A」。 – IrisRose

+0

根據您的編輯,您只需複製A列中所有文檔的最後一個單元格。如果您只想複製整列。我建議你將它從A&lr1改爲A1:Alr1來複制範圍。其餘的編輯很好。 –

+0

有了這個新的改變,代碼整齊地合併了文檔,但是它是按行而不是按列合併的。這就是我修改代碼的方式。你能告訴我,如果這是正確的? wb1.Sheets(1).Range(「A1:Alr1」)。複製目標:= wb.Sheets(1).Range(「A」&(lr + 1))。此代碼合併每個文檔的所有行1,而不是每個文檔的所有列A。 – IrisRose

相關問題