Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中

当我们有一张表里面有很多sheet 具有相同的表结构,如果需要汇总到一张表中,那么我们可以借助VBA 去实现汇总自动化

示例1 :
在这里插入图片描述

Sub 复制所有工作表内容()
    Dim ws As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    
    ' 设置目标表格,即要将所有工作表内容复制到的表格
    Set targetSheet = ThisWorkbook.Sheets("汇总")
    
    ' 清除目标表格中已有的数据
    targetSheet.Rows("2:1000000").Clear
    
    ' 添加目标表格的表头
    targetSheet.Range("A1:C1").Value = ThisWorkbook.Sheets("汇总").Range("A1:C1").Value
    
    ' 循环遍历每个工作表
    For Each ws In ThisWorkbook.Sheets
        ' 排除指定的工作表
        If ws.Name <> "汇总" Then
            ' 获取源工作表最后一行的行号
            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
            
            ' 复制源工作表的 A 到 M 列内容到目标表格中的下一行
            ws.Range("A2:M" & lastRow).Copy targetSheet.Cells(targetSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A")
        End If
    Next ws
    
    MsgBox "所有工作表内容已复制到目标表格中!", vbInformation
End Sub

运行结果如下:
在这里插入图片描述
示例2 :
如下图所示
汇总的时候需要插入一个新列,填入各个sheetname ;
各个sheet 有合并单元格,汇总之后需要拆分合并单元格并填充空白单元格;
各个sheet 由几个单独表格组成,并且表格之间有Note 和空白行,汇总之后需要删除这些note 或者空白行
在这里插入图片描述

Sub 复制所有工作表内容()
    Dim ws As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim rng  As Range
    Dim cell As Range
    Dim deleteRange As Range
    Dim i As Integer




    ' 设置目标表格,即要将所有工作表内容复制到的表格
    Set targetSheet = ThisWorkbook.Sheets("Sheet1")
    
    ' 清除目标表格中已有的数据
    targetSheet.Rows("2:1048000").Select
    Selection.Delete Shift:=xlUp

    
    ' 添加目标表格的表头

    Sheets("全国").Select
    Range("E2:AU2").Select
    Selection.Copy
    Sheets("Sheet1").Select
    Range("F1:AV1").Select
    ActiveSheet.Paste
    
    ' 循环遍历每个工作表
    For Each ws In ThisWorkbook.Sheets
        ' 排除指定的工作表
        If ws.Name <> "Sheet1" Then
            ' 获取源工作表最后一行的行号
            lastRow = ws.Cells(1048000, "D").End(xlUp).Row
        sheetName = ws.Name
        ws.Columns(1).Insert Shift:=xlToRight '在第一列之前插入新的一列
        
        '将对应的工作表名称填充到新插入的列中
        ws.Range("A3:A" & lastRow).Value = sheetName
        
        
            ' 复制源工作表的 A 到 AU 列内容到目标表格中的下一行
           ws.Range("A3:AV" & lastRow).Copy targetSheet.Cells(targetSheet.Cells(1048000, "E").End(xlUp).Row + 1, "A")
         End If
    Next ws
    
 
    Set ws = ThisWorkbook.Worksheets("Sheet1")
   lastRow = ws.Cells(1048000, "A").End(xlUp).Row
    Set rng = ws.Range("B2:AV" & lastRow)
    
    
    
    For Each cell In rng
        If InStr(1, cell.Value, "Note", vbTextCompare) > 0 Then
            If deleteRange Is Nothing Then
                Set deleteRange = cell.EntireRow
            Else
                Set deleteRange = Union(deleteRange, cell.EntireRow)
            End If
        End If
    Next cell
    
    
        For Each cell In rng
        If InStr(1, cell.Value, "销售额", vbTextCompare) > 0 Then
            If deleteRange Is Nothing Then
                Set deleteRange = cell.EntireRow
            Else
                Set deleteRange = Union(deleteRange, cell.EntireRow)
            End If
        End If
    Next cell
    
            For Each cell In rng
        If InStr(1, cell.Value, "Jan", vbTextCompare) > 0 Then
            If deleteRange Is Nothing Then
                Set deleteRange = cell.EntireRow
            Else
                Set deleteRange = Union(deleteRange, cell.EntireRow)
            End If
        End If
    Next cell

    If Not deleteRange Is Nothing Then
        deleteRange.Delete
    End If



    '删除空白的整行
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row '获取最后一行的行号

 
 

    Set rng = ws.Range("A2:AV" & lastRow) '替换为你要操作的区域范围
    

      For i = lastRow To 1 Step -1
          If Application.WorksheetFunction.CountA(rng.Rows(i)) = 1 Then
             rng.Rows(i).Delete
          End If
      Next i
      
   

 Dim m As Integer
 Dim n As Integer
 
 

  For i = 1 To lastRow
      '判断该单元格是否是合并单元格
       If Cells(i, 2).MergeCells = True Then
          m = Cells(i, 2).MergeArea.Count
          n = Cells(i, 2).MergeArea.Rows.Count
          '记录合并单元格的个数
          Range(Cells(i, 2), Cells(i + m - 1, 2)).UnMerge      '拆分单元格
          
          Range(Cells(i, 2), Cells(i + m - 1, 2)).FillDown       '填充单元格

          i = i + m - 1
          
      End If
 Next
 
 
 
 For i = 1 To lastRow
      '判断该单元格是否是合并单元格
       If Cells(i, 3).MergeCells = True Then
          m = Cells(i, 3).MergeArea.Count
          n = Cells(i, 3).MergeArea.Rows.Count
          '记录合并单元格的个数
          Range(Cells(i, 3), Cells(i + m - 1, 3)).UnMerge      '拆分单元格
          If m > 1 And n > 1 Then
          Range(Cells(i, 3), Cells(i + m - 1, 3)).FillDown       '填充单元格
          End If
          i = i + m - 1
          
      End If
 Next
 

  
    
 
    
    MsgBox "所有工作表内容已复制到目标表格中!", vbInformation
End Sub
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 VBA 代码示例,可以实现将文件夹下指定行的所有内容复制粘贴到另一个工作表中: ``` Sub CopyDataFromFolder() Dim folderPath As String Dim filePath As String Dim wb As Workbook Dim wsSource As Worksheet Dim wsTarget As Worksheet Dim lastRow As Long Dim i As Long '定义文件夹路径和工作 folderPath = "C:\Test\" '修改为您的文件夹路径 filePath = Dir(folderPath & "*.xlsx") Set wb = ThisWorkbook Set wsSource = wb.Sheets("Sheet1") '源工作 Set wsTarget = wb.Sheets("Sheet2") '目标工作 '清空目标工作 wsTarget.Cells.ClearContents '循环遍历文件夹下的所有文件 While filePath <> "" '打开文件 Set wb = Workbooks.Open(folderPath & filePath) Set wsSource = wb.Sheets("Sheet1") '源工作 '获取源工作最后一行 lastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row '循环遍历指定行,将内容复制到目标工作表中 For i = 1 To lastRow If wsSource.Cells(i, 1) = "关键字" Then '修改为您要复制的行的关键字 wsSource.Range("A" & i & ":F" & i).Copy wsTarget.Range("A" & Rows.Count).End(xlUp).Offset(1, 0) End If Next i '关闭文件 wb.Close False '获取下一个文件 filePath = Dir() Wend MsgBox "复制完成!" End Sub ``` 需要注意的是,您需要将代码中的“关键字”修改为您要复制的行的关键字,同时将文件夹路径和工作名称修改为实际值。此外,您需要在 VBA 编辑器中打开您的工作簿,并在“工具”菜单中选择“引用”,勾选“Microsoft Scripting Runtime”选项,以便使用 FileSystemObject 对象来访问文件夹中的文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值