2012-12-03 349 views
5

好吧,我嘗試尋找類似的問題,但由於這是我第一次查看Excel的VBA編輯器,所以我不太瞭解正在討論的內容。將excel電子表格合併到一個電子表格中

簡單來說,我有2個表格: 「工作表Sheet1」 和 「Sheet2的」

表1:

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 

第2頁:

A   B 
1 Header1 Header2 
2 Text3  Info3 
3 Text4  Info4 

我想有一個宏將兩張紙合併成一張新紙(Sheet3),如下所示:

A   B 
1 Header1 Header2 
2 Text1  Info1 
3 Text2  Info2 
4 Text3  Info3 
5 Text4  Info4 

我試着錄製一個宏並保存以備後用。爲此,我創建了一個新工作表,將所有從Sheet1複製/粘貼到Sheet3,然後將除Sheet2之外的所有信息複製到Sheet3。

嗯,這個宏的工作原理是這個數據,但是我發現由excel生成的代碼使它在粘貼數據之前選擇了單元格A4(這裏)。雖然這適用於這些數據,但如果每張表中的記錄數量一次又一次發生變化,它將不起作用。基本上,

1)我想知道是否有一個函數在粘貼下一組數據之前自動進入最後一個相關單元格(在本例中爲單元格A4,如果我有一個表格,則單元格A6 )。我已經看到了「ActiveCell.SpecialCells(xlLastCell).Select」(當我使用Ctrl + End時激活)功能,但是將我帶到了工作表的末尾。使用該功能後,我需要類似於「Home」和「Down」箭頭鍵的功能,才能使其效果最佳。

這些選項中的任何一個都適合我。^_^

這裏是在2010年從Excel的宏錄製記錄我目前的VBA代碼:

Sub Collate_Sheets() 

    Sheets.Add After:=Sheets(Sheets.Count) 
    Sheets(Sheets.Count).Select 
    Sheets(Sheets.Count).Name = "Sheet3" 
    Sheets("Sheet1").Select 
    Range("A1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
    ActiveCell.SpecialCells(xlLastCell).Select 
    ' I need to select one cell below, and the cell in column A at this point 
    Sheets("Sheet2").Select 
    Range("A2").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Sheet3").Select 
    ActiveSheet.Paste 
End Sub 

我希望我沒有忘記任何信息的有用部分。讓我知道,如果我做到了!

+0

哦謝謝Doug!我不知道論壇選擇了足夠的語法高亮^^; – Jerry

+0

要獲取最後一個真正使用的單元格下面的行,可以編寫'Range(「A」&Rows.Count).End(xlup).Offset(1)'。用你需要的任何列替換「A」。 –

+0

不客氣傑裏。要突出顯示,只需突出顯示您的代碼,然後單擊頂部的代碼圖標即可。它看起來像'{}'。 –

回答

6

傑裏,試試這個代碼。我清理了一下你的代碼,使它能夠更有效地做你想做的事情。我根據你的代碼所說的我認爲是正確的做出了一些假設。如果沒有,評論這個答案,我會調整,如果需要的話。

Option Explicit 

Sub Collate_Sheets() 


    Sheets.Add After:=Sheets(Sheets.Count) 
    Dim wks As Worksheet 
    Set wks = Sheets(Sheets.Count) 

    wks.Name = "Sheet3" 

    With Sheets("Sheet1") 

    Dim lastrow As Long 
    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A1:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp) 

    End With 

    With Sheets("Sheet2") 

    lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 

    .Range("A2:B" & lastrow).Copy wks.Range("A" & wks.Rows.Count).End(xlUp).Offset(1) 

    End With 


End Sub 
+0

好吧,我試着用上面的樣本數據(相同記錄),它給了我這個: 「單元格A2 =標題1」 「單元格A3 =標題1」 「單元格A4 =文本3」 而所有其他空白 這裏有點晚了,我會上牀睡覺。如果你還沒有看到明天的代碼,那麼我會試着去看看代碼中可能會出現什麼問題。感謝您的幫助到目前爲止=) – Jerry

+0

@Jerry - >我編輯了代碼並使其適用於您的數據集。如果您需要爲真實數據集提供這些信息,則技巧是僅在第一個複製/粘貼中選擇標題,並確保您使用的數據集中不包含空白的列來捕獲最後一行。 –

+0

謝謝!它現在完美工作,我已經將代碼調整爲多個表單(我需要的數字)以及相關列的數量。再次感謝!^_ ^ – Jerry

0

如果有人想刪除Shee3之前創建的,以避免錯誤

'Delete Sheet 3 
    Application.DisplayAlerts = False 
    Sheets("Sheet3").Delete 

感謝斯科特·霍爾茨曼!