21、[VBA入门到放弃笔记] 拆分工作表

2017-06-13  本文已影响105人  叶知行

Application.DisplayAlerts = False
    For Each Sht In Worksheets
        If Sht.Name <> "总表" Then
            Sht.Delete
        End If
    Next
    Application.DisplayAlerts = True
Paste_Image.png
 With Sheet1
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        '去除重复,提取部门名称,使用辅助列
        .Range("a1:a" & LastRow).Copy .Range("h1") '复制部门数据到H列
        .Range("h1:h" & LastRow).RemoveDuplicates Columns:=1, Header:=xlYes '去除重复值
    End With
For i = 2 To LastRow1
            SName = .Cells(i, "H") '新建的工作表名称
            Rng.AutoFilter Field:=1, Criteria1:="" & SName '按部门筛选数据
            Set Rng1 = Rng.SpecialCells(xlCellTypeVisible) '获取可见行(筛选的数据)
            Rng.AutoFilter '关闭自动筛选
            Set Sht1 = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '新建工作表
            Sht1.Name = SName
            Rng1.Copy Sheets(SName).Range("a1") '复制数据到新见的工作表
   Next

Sub 拆分工作表()
    Dim LastRow As Long, LastRow1 As Long
    Dim Rng As Range, Rng1 As Range, SName As String
    Dim Sht As Worksheet, Sht1 As Worksheet
    
    Application.DisplayAlerts = False
    For Each Sht In Worksheets
        If Sht.Name <> "总表" Then
            Sht.Delete
        End If
    Next
    Application.DisplayAlerts = True
    
    Application.ScreenUpdating = False
    With Sheet1 '总表
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        Set Rng = .Range("a1:b" & LastRow) '数据源区域
        '去除重复,提取部门名称,使用辅助列
        .Range("a1:a" & LastRow).Copy .Range("h1") '复制部门数据到H列
        .Range("h1:h" & LastRow).RemoveDuplicates Columns:=1, Header:=xlYes '去除重复值
        LastRow1 = .Cells(Rows.Count, "H").End(xlUp).Row '获取H列最后一行行号
        For i = 2 To LastRow1
            SName = .Cells(i, "H") '新建的工作表名称
            Rng.AutoFilter Field:=1, Criteria1:="" & SName '按部门筛选数据
            Set Rng1 = Rng.SpecialCells(xlCellTypeVisible) '获取可见行(筛选的数据)
            Rng.AutoFilter '关闭自动筛选
            Set Sht1 = Worksheets.Add(after:=Worksheets(Worksheets.Count)) '新建工作表
            Sht1.Name = SName
            Rng1.Copy Sheets(SName).Range("a1") '复制数据到新建的工作表
        Next
        .Range("h:h").Clear '清空辅助的部门数据
    End With
    Application.ScreenUpdating = True
End Sub
Paste_Image.png
上一篇 下一篇

猜你喜欢

热点阅读