2012-09-04 72 views
0

將Excel-Tables從多個文件複製和粘貼到單個文件的方法是什麼?特別是如何確定在makro中複製和粘貼使用的行的範圍?聯合多個Excel表單。 (粘貼在彼此之下)

+1

最簡單的方法是遍歷工作表,找到最後一行(http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba)和最後一列(http://stackoverflow.com/questions/11883256/copy-last-column-with-data-on-specified-row-to-the-next-blank-column)來確定範圍並簡單地複製它過度。 –

回答

1

如果你的意思是你可以使用ListObjects集合引用它們。

嘗試此操作(位於目標工作簿中的代碼)
此代碼將所有源表格作爲單獨的表格複製,其間有空行。如果要將數據合併到單個表中,則需要複製lo.DataBodyRange而不是lo.Range,然後處理標題行並將其轉換爲表格。

Sub CopyTables() 
    Dim wbFrom As Workbook 
    Dim shFrom As Worksheet 
    Dim shTo As Worksheet 
    Dim lo As ListObject 
    Dim clTo As Range 

    ' Setup Destination for copied tables 
    Set shTo = ThisWorkbook.Worksheets("DestinationSheet") ' <-- change name to your destination sheet name 
    ' remove any existing data 
    shTo.UsedRange.EntireRow.Delete 
    Set clTo = shTo.Cells(1, 1) 
    ' Loop through open workbooks 
    For Each wbFrom In Application.Workbooks 
     ' except destination wb 
     If wbFrom.Name <> ThisWorkbook.Name Then 
      ' loop through all sheets 
      For Each shFrom In wbFrom.Worksheets 
       ' loop through all tables on sheet 
       For Each lo In shFrom.ListObjects 
        lo.Range.Copy clTo 
        ' offset to next paste location, leave one empty row between tables 
        Set clTo = clTo.Offset(lo.ListRows.Count + 2, 0) 
       Next 
      Next 
     End If 
    Next 
End Sub 

替代的內for循環粘貼到一個單一的範圍

   For Each lo In shFrom.ListObjects 
        lo.DataBodyRange.Copy clTo 
        Set clTo = clTo.Offset(lo.ListRows.Count, 0) 
       Next 
2

如果這是一次性操作,可能是最快的方法是將激活Office剪貼板(在右下角的箭頭首頁標籤)。這允許最多24個分開的範圍被收集並粘貼在另一個之下。

假設數據是在一個工作簿,並開始在第2行上的每個片,如在下面的例子中,可以:

  • 選擇所有選項卡
  • 選擇第一薄片
  • 上所有的行
  • 按Ctrl + C,Ctrl + Page Down,多次複製所有數據
  • 選擇一個新的工作表,然後單擊粘貼所有

請注意,只複製使用的範圍,以便可以複製整個工作表範圍,而不需要在每個工作表上定位最後一個單元格。

enter image description here