如果你一直有关注卢子的文章,应该对这个模板非常熟悉,点一下书籍,就将职业拆分到相应的工作表,超好用。 是不是有点小激动了,终于动真格了,如果能学会这种代码那就牛逼了。 要一次学到位很难,先教你最核心部分,分表全部都是空白的,点书籍运行,立马将内容拆分到相应的表格。 如果这种写公式真的能把人写哭,公式跟长城一样长…… 如果这种用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) |
|