打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
excel将一个工作表根据分类条件拆分成多个sheet工作表
  • Cells(2,3) //表示两行三列的单元格
  • Range(“a1”).offset(1,2) // 下移一行,右移2行
  • Range(“a10”).end(xlup) //从a10往上数,有多少行已用
  • Range(“a10”).entirerow //选中a10的整行
  • Range(“a10”).resize(1,10) //重选区域
  • Range(“a10”).copy //复制
  • sheet1.Range("a:f").AutoFilter field:=4, Criteria1:="一车间" //'在sheet1中筛选第四列为一车间的数据。其中field是第x列,Criteria1是筛选条件。注意Criteria1最后一个是数字1

案例

题目:

excel将下面叫做“数据”的工作表根据分类条件拆分成多个sheet工作表,表名为分类条件。

结果如下:

分析:

  1. 要新建所有分类表,在总表中循环每行,把要筛选的列值作为新建的表名, 每次循环要判断是否已存在表名,重复建表会报错
  2. 删除多余的表,不然每次执行会产生很多表比较混乱
  3. 需要筛选拷贝数据。

注意:执行这段代码前必须选中总表即你要拆分的表,否则数据会遭到破坏

代码:

Sub chaifen()
  Dim i As Integer
    Dim j, k, irow, count As Integer
    Dim sht  As Worksheet
    Dim sht1  As Worksheet
    Dim x As Integer
    Dim sht0  As Worksheet

    Set sht0 = ActiveSheet
    
    x = InputBox("请选择你要按哪列分,第几列就填几")
    
    '执行分表前删除多余的表
    Application.DisplayAlerts = False
    If Sheets.count > 1 Then
        For Each sht1 In Sheets
            If sht1.Name <> sht0.Name Then
             sht1.Delete
             End If
        Next
        
    End If
    
    Application.DisplayAlerts = True
    
    
    '获取sheet1总行数
    irow = sht0.Range("a65536").End(xlUp).Row
    
     For i = 2 To irow
     '初始化k
        k = 0
        For Each sht In Sheets
        '判断是否已存在表名
            If sht.Name = sht0.Cells(i, x) Then
            k = 1
            End If
        Next
        '如果不存在表名就新建一个表
        If k = 0 Then
            Sheets.Add after:=Sheets(Sheets.count)
            Sheets(Sheets.count).Name = sht0.Cells(i, x)
        End If
        '筛选拷贝数据
         For j = 2 To Sheets.count
            sht0.Range("a1:f" & irow).AutoFilter field:=x, Criteria1:=Sheets(j).Name
            sht0.Range("a1:f" & irow).Copy Sheets(j).Range("a1")
            '关闭筛选
            sht0.Range("a1:f" & irow).AutoFilter
         Next
        
    Next
    sht0.Select
    
 End Sub

注意:执行这段代码前必须选中总表即你要拆分的表,否则数据会遭到破坏

这段案例代码的知识点有:

  1. Set sht0 = ActiveSheet
  2. irow = sht0.Range("a65536").End(xlUp).Row
  3. Sheets(Sheets.count).Name = sht0.Cells(i, x)
  4. sht0.Range("a1:f"&irow).AutoFilter field:=x, Criteria1:=Sheets(j).Name
  5. sht0.Range("a1:f" & irow).Copy Sheets(j).Range("a1")
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
轻松搞定Excel拆分工作表
【VBA】交互按照要求拆分表
多表合一表2010-01-13 20:31Sub 多表合一表()
指定某列字段,拆分总表为若干个分表存在当前工作簿里,只需要3秒!
Excel | VBA(4)——合并工作表
Excel | VBA轻松实现跨多工作表查询数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服