Vba 合并多个excel工作表。(贴在彼此下面)

Vba 合并多个excel工作表。(贴在彼此下面),vba,excel,union,Vba,Excel,Union,将Excel表格从多个文件复制和粘贴到单个文件的最聪明的方法是什么。因此,特别是如何确定makro内复制和粘贴所用行的范围?如果您真正指的是表,则可以使用ListObjects集合引用它们 尝试此操作(代码位于目标工作簿中) 这段代码将所有源表复制为单独的表,中间有一个空行。如果要将数据合并到单个表中,则需要复制lo.DataBodyRange而不是lo.Range,并分别处理标题行和到表的转换 Sub CopyTables() Dim wbFrom As Workbook Di

将Excel表格从多个文件复制和粘贴到单个文件的最聪明的方法是什么。因此,特别是如何确定makro内复制和粘贴所用行的范围?

如果您真正指的是表,则可以使用
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
如果您真正指的是表,那么可以使用
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

如果这是一次性操作,最快的方法可能是激活office剪贴板(主页选项卡右下角的箭头)。这样最多可以收集24个单独的范围,并将其粘贴到彼此下方

假设数据位于一个工作簿中,并从每张工作表的第2行开始,如以下示例所示,您可以:

  • 选择所有选项卡
  • 选择第一张图纸上的所有行
  • 反复按Ctrl+C、Ctrl+Page Down复制所有数据
  • 选择一张新工作表,然后单击“全部粘贴”
请注意,仅复制已使用的区域,因此您可以复制整个图纸范围,而无需定位每张图纸上的最后一个单元格


如果这是一次性操作,最快的方法可能是激活office剪贴板(主页选项卡右下角的箭头)。这样最多可以收集24个单独的范围,并将其粘贴到彼此下方

假设数据位于一个工作簿中,并从每张工作表的第2行开始,如以下示例所示,您可以:

  • 选择所有选项卡
  • 选择第一张图纸上的所有行
  • 反复按Ctrl+C、Ctrl+Page Down复制所有数据
  • 选择一张新工作表,然后单击“全部粘贴”
请注意,仅复制已使用的区域,因此您可以复制整个图纸范围,而无需定位每张图纸上的最后一个单元格


最简单的方法是在工作表中循环,找到最后一行()和最后一列(),以确定范围并简单地复制它。最简单的方法是在工作表中循环,找到最后一行()和最后一列(),以确定范围并简单地复制它。