一个商品属于多个分类_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工作表,表名为分类条件。

4ec67cfac1ab1543c61f33d7c0d65dde.png

结果如下:

2c6c4fba33b79fc34a26ca2373e08f42.gif

分析:

  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")

看了这篇文章觉得对你有用的话,关注我的公众号“学会数据分析”并且用你的小手帮忙分享一下。

我会经常总结一些案例和大家一些分享。

ee3bd76cb866e7ae4dd733e27e7172fc.png

课件下载地址:

链接永久有效:

https://pan.baidu.com/s/1gAmb-z84vLh7u6X2mFY12Q

提取码: t1km 复制这段内容后打开百度网盘手机App,操作更方便哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值