1、拆分工作表(按照客户指定表*指定列)

Sub 拆分工作表() '按照客户指定表指定列拆分
    Dim sht As Worksheet
    Dim str As String
    Dim i, j, k As Integer
    Dim l
    Dim irow, icolumn As Integer
    '由用户指定拆分哪张工作表
    str = InputBox("请问要拆分哪张工作表?请输入工作表的标签名:")
    '判断该表是否存在
    For Each sht In Sheets
        If sht.Name = str Then
            k = 1
        End If
    Next
    If k = 0 Then
        MsgBox "该工作表不存在,请输入正确的标签名!"
        Exit Sub
    End If
    '获取需要进行拆分的工作表最后一行数据的行号及最后一列的列号
    irow = Sheets(str).Range("a65536").End(xlUp).Row
    icolumn = Sheets(str).Range("iv1").End(xlToLeft).Column
    '由用户指定根据第几列进行数据拆分
    l = InputBox("请问需要根据第几列进行数据拆分?")
    '如果l不是数字、小于1或者大于icolumn,弹出提示框并中止过程
    If IsNumeric(l) = False Or l < 1 Or l > icolumn Then
        MsgBox "请输入正确的数字"
        Exit Sub
    End If
    '将l转变为数字类型
    l = Val(l)
    '删除非指定工作表之外的其他所有工作表
    Application.DisplayAlerts = False
    For Each sht In Sheets
        If sht.Name <> str Then
            sht.Delete
        End If
    Next
    Application.DisplayAlerts = True
    '根据用户指定的列新建工作表并确保表名不重复
    For i = 2 To irow
        k = 0
        For Each sht In Sheets
            If Sheets(str).Cells(i, l) = sht.Name Then
                k = 1
            End If
        Next
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Sheets(str).Cells(i, l)
        End If
    Next
    '根据用户指定的列进行筛选和复制
    For j = 2 To Sheets.Count
        Sheets(str).Cells(1, 1).Resize(irow, icolumn).AutoFilter Field:=l, Criteria1:=Sheets(j).Name
        Sheets(str).Cells(1, 1).Resize(irow, icolumn).Copy Sheets(j).Range("a1")
    Next
    Sheets(str).Cells(1, 1).Resize(irow, icolumn).AutoFilter
    '所有操作完成后回到"数据"工作表,并弹出提示框
    Sheets(str).Select
    MsgBox "已按照第" & l & "列对“" & str & "”工作表拆分完成!"
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值