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