分享

按职业拆分表格,公式写到哭,Vba一循环全搞定!

 Excel不加班 2020-06-06

如果你一直有关注卢子的文章,应该对这个模板非常熟悉,点一下书籍,就将职业拆分到相应的工作表,超好用。

是不是有点小激动了,终于动真格了,如果能学会这种代码那就牛逼了。

要一次学到位很难,先教你最核心部分,分表全部都是空白的,点书籍运行,立马将内容拆分到相应的表格。

如果这种写公式真的能把人写哭,公式跟长城一样长……

如果这种用VBA操作,超简单,只要你会筛选和复制粘贴就可以解决。

思路:

根据职业,筛选生产,然后复制到生产这个表。

根据职业,筛选品质,然后复制到品质这个表。

根据职业,筛选财务,然后复制到财务这个表。

根据职业,筛选行政,然后复制到行政这个表。

也就是执行4次筛选,复制的操作。在VBA中,你只要录制一次宏,教宏如何筛选复制,然后让他一直这么操作下去,也就是For循环,他就帮你一次全搞定。

Step 01 录制一个根据职业,筛选生产的宏。

Step 02 查看刚刚录制的宏代码。

Range("A1").Select就是选择A1单元格。

Selection.AutoFilter就是对选择的内容做筛选,相当于点一下筛选按钮。

ActiveSheet.Range("$A$1:$G$93").AutoFilter Field:=4, Criteria1:="生产"就是对激活的工作表的区域进行筛选,对区域第4列 ,条件为生产的内容进行筛选,也就是说实际干活的是这一句代码。

将循环语句写上,连续写了6天,应该已经很熟练了。

将激活的工作表ActiveSheet改成Sheets(1)也就是第一个表,"生产"改成Sheets(i).Name也就是每个工作表的名称。

复制到相应的表格,前面的教程已经讲过,就不重新录制宏,知道Copy是复制就行。

Step 03 写到这里,原则上就可以完成,不过不够完美,先来看看运行的效果。先手工将原来分表的内容删除掉,再操作。

前面几节课到现在删除内容都用手工,现在来个自动删除的。所有单元格用Cells,删除用Delete,也就是Sheets(i).Cells.Delete,再加个循环语句。同一个模板中,可以写很多段不同代码。

上面的代码可以调用下面的代码,直接用Call 代码名称,也就是Call 删除

到这里还有一个小细节,操作完还有筛选的按钮,别人一看就猜出你是用筛选复制完成。

这里可以再加一句代码实现取消筛选按钮,让别人不知道你的操作过程,前面已经说过,这个Sheets(1).Range("$A$1:$G$93").AutoFilter相当于点一下筛选按钮。

到此,完整的代码就出来了。

Sub 拆分表格()

Call 删除

Dim i As Integer

    For i = 2 To Sheets.Count

        Sheets(1).Range("$A$1:$G$93").AutoFilter Field:=4, Criteria1:=Sheets(i).Name

        Sheets(1).Range("$A$1:$G$93").Copy Sheets(i).Range("a1")

        Sheets(1).Range("$A$1:$G$93").AutoFilter

    Next

End Sub

Sub 删除()

    Dim i As Integer

        For i = 2 To Sheets.Count

            Sheets(i).Cells.Delete

        Next

End Sub

最终效果动画。

这里留一个小练习给你,区域目前是按固定的,而实际上区域是会变动的,参考昨天的文章,将Range("$A$1:$G$93")改成通用的。

推荐:一键搞定!根据总表生成多个分表,根据分表生成目录

上篇:超完美的现金日记账汇总表,你值得拥有!

随意聊聊。

作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多