520因爱而购,为爱放价
特推超级会员限时疯狂抢购
点击了解
支持微信公众号+小程序+APP+PC网站多平台学习
亲爱的爱知趣小伙伴们,上次分享了用vba高级筛选做的超级查询器是不是很爽啊,就用了一行代码就能实现那么复杂的查询功能,真的是太厉害了!
今天继续用高级筛选做一个超级拆分器,
什么是超级拆分器?
就是把数据明细中按某一个字段进行拆分为分表!
先来看下演示效果吧,动画01
这操作简单又方便,代码会不会很多呀?
为了让大家都能学会,特意使用了高级筛选,为的就是减少代码量。
效率嘛。。。可能会比其它方法慢那么1,秒2秒的。
你在意多等这么点时间吗?在意的话就努力学,将来优化一下就会更快了
先来看代码图吧,我把结构框了一下,一共三大块! 图片01
代码有点多,还是直接贴出来吧,后面再慢慢讲解
Option Explicit Sub 拆分() Dim xRow As Integer, iCount As Integer Dim Sht As Worksheet Application.DisplayAlerts = False For Each Sht In Worksheets If Sht.Name <> "数据源" Then Sht.Delete Next Application.DisplayAlerts = True Application.ScreenUpdating = False With Worksheets("数据源") .Range("M2").ClearContents .Range("S1").Value = .Range("M1").Value .Range("A:G").AdvancedFilter xlFilterCopy, .Range("M1:M2"), .Range("S1"), True For xRow = 2 To .Range("S300").End(xlUp).Row iCount = iCount + 1 .Range("M2").Value = .Cells(xRow, "S").Value Set Sht = Worksheets.Add(, Worksheets(xRow - 1)) Sht.Name = .Cells(xRow, "S").Value .Range("A:G").AdvancedFilter xlFilterCopy, .Range("M1:M2"), Range("A1") Next .Activate .Range("M2").Clear .Range("S:S").Clear End With Application.ScreenUpdating = True If iCount > 0 Then MsgBox "工作表拆分完成,共计拆分:" & iCount & " 个工作表!", , "拆分完成" Else MsgBox "一个都没成功,可能是要拆分的内容太多,程序霸工了!", , "失败" End If End Sub |
第一块、删除 数据源 之外所有工作表,
Application.DisplayAlerts = False 作用是禁用警告,删除完了必须要启用哟!!
什么是警告?手工删除一个工作表就能看到警告了
第二块、拆分数据(又把它们拆成了三块)
这里使用了两次高级筛选
第一次筛选唯一值,前面还有两行代码,就是为筛选唯一值做准备用的。
筛选唯一值,需要将AdvancedFilter 的参数4设置为 True(上一次的查询器没有使用此参数)
第二部分循环拆分数据,上一次的超级查询器里我们知道了高级筛选是需要有条件的,所以这循环的作用就不停的往条件区域中(M2单元格)写入条件,然后再把数据筛选到目标位置。
因为我们是要把结果弄到新工作表中,所以在筛选之前要新建工作表,并且设置好工作表名称 ,然后再把数据筛选出去,这样才能直接得到我们要的结果(这是程序流程)
第三部份,因为程序借用了其它单元格,所以运行完了当然要 毁尸灭迹 啦,不然多不好看呀!!
最后那一块就是完成的提示了,没有提示也可以,就怕有时候不知道又点一次!!
反正也就那么几秒钟,也没啥,不过有提示的话会更为高大上!
这个拆分器怎么样?喜欢的话,赶紧动手练习吧!!
Excel学习交流群Q群:582326909 欢迎加入
(群共享,配套练习课件,提供答疑)
今天的分享就到这,如果教程对大家有用,希望大家多多分享点赞支持小编哦!你的每一次点赞和转发都是支持小篇坚持原创的动力。
推荐学习★★★★★
Excel教程:吐血整理,70个精选实用Excel技巧(↶点击学习)
Excel教程:100篇精华原创教程汇集!收藏慢慢学(↶点击学习)
推荐Office学习关注
(PPT WORD EXCEL)