2017-10-05 18 views
0

我是VBA的新手,主要與創建宏一起使用它。正如你從下面的代碼中可以看到的,我試圖從三個不同的選項卡中獲取表格並將它們合併爲一個。但是,我很難理解如何確保每個表格將直接粘貼到前一個表格的下面,而不是覆蓋它(特別是每個月創建新行時)。需要幫助更正VBA /宏代碼以將多個選項卡合併爲一個

非常感謝您提供任何幫助。

' Step_4_Combination_Tab Macro 

    Sheets("Past Data").Select 
    Range("A2:M2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Sheets("Combination").Select 
    Range("A1").Select 
    ActiveSheet.Paste 
    Range("A1").Select 
    Selection.End(xlDown).Select 
    Range("A5483").Select 
    Sheets("Actual").Select 
    Range("A5:M5").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Combination").Select 
    Range("A5483").Select 
    ActiveSheet.Paste 
    Range("A5483").Select 
    Selection.End(xlDown).Select 
    Range("A8341").Select 
    Sheets("Forecast").Select 
    Range("A4:M4").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("Combination").Select 
    ActiveSheet.Paste 
    Selection.End(xlUp).Select 
End Sub 

回答

0

下面的代碼可能會做你想要什麼:

Sub mergeSheets() 
    Set targetSheet = Sheets("Combination") 
    For i = 1 To Sheets.Count 
     If Sheets(i).Name <> "Combination" Then 
      Last = LastRow(Sheets("Combination")) 
      Sheets(i).UsedRange.Copy targetSheet.Cells(Last + 1, 1) 
     End If 
    Next i 
End Sub 

Function LastRow(sh As Worksheet) 
LastRow = sh.Cells.Find(What:="*", _ 
         After:=sh.Range("A1"), _ 
         Lookat:=xlPart, _ 
         LookIn:=xlFormulas, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlPrevious, _ 
         MatchCase:=False).Row 
End Function 

從這裏https://www.exceltip.com/cells-ranges-rows-and-columns-in-vba/copy-the-usedrange-of-each-sheet-into-one-sheet-using-vba-in-microsoft-excel.html

0

採取了一些codebits你需要找到的最後一行有數據並粘貼您有一個表。

LR = Sheets("Combination").Range("A" & Rows.Count).End(xlUp).Row 
    Pasterange = "A" & LR 
    Sheets("Combination").Range(Pasterange).Paste 
0

我猜你想要將標籤「過去的數據」,「實際」和「預測」中的數據複製到「合併」。我對嗎?由於某些奇怪的原因,源工作表中的數據始於不同的行。我會這樣做:

Sub AllToCons() 
CopyToCons "Past data", 2 
CopyToCons "Actual", 5 
CopyToCons "Forecast", 4 
End Sub 

Sub CopyToCons(wsName As String, lRow As Long) 
'wsName: name of sheet we are copying from 
'lRow: number of row where data start 

Dim ws As Worksheet 
Dim wsCons As Worksheet 
Dim rng As Range 

Set wsCons = ThisWorkbook.Worksheets("Consolidated") 
Set ws = ThisWorkbook.Worksheets(wsName) 

With ws 
Set rng = Range(.Range("A" & lRow), .Range("M" & .Cells.Rows.Count).End(xlUp)) 
End With 

rng.Copy 

With wsCons 
.Range("A" & .Cells.Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll 
End With 

如果您只想粘貼值,請鍵入xlPasteValues而不是xlPasteAll。 希望它有幫助。