分享

日报、月报不发愁,再也不用一个个操作,一次全搞定

 Excel不加班 2024-05-16 发布于广东
与 30万 粉丝一起学Excel

要生成30个日报表,估计你是一个个操作,移动复制重命名,改了大半天。有了VBA以后,就可瞬间生成,点一下按钮全搞定。

其实,实际工作中,很多东西都可以靠VBA生成的。VBA并不遥远,而是与你的工作息息相关。

你也不要把VBA想得太复杂,跟着卢子学习就行,其他别想。

还是老套路,用最原始的方法操作,先录制宏,再慢慢改代码完善。

Step 01 录制一个宏,将模板移动或复制,移至最后,勾选建立副本。

Step 02 点VB进入后台,再点模块,就可以看到刚刚录制的宏。

Sheets("模板").Select 选择模板这个工作表。

中间那句不用管,没啥意义。

Sheets("模板").Copy After:=Sheets(1) 将模板复制到第1个工作表后面。Copy复制After之后,即使不会英语,你都可以大概猜出意思。

现在要实现的效果就是,每复制一次,都在最后工作表的后面创建一个新表。第1次就在表1后面,第2次就在表2后面,第3次就在表3后面。

前面学了循环语句,你可能想到通过i这个变量来实现,其实还有一个更智能的。Sheets.count就是计算工作表的个数。

现在语句就改成Sheets("模板").Copy After:=Sheets(Sheets.Count)

生成新表的同时对该表进行命名,Sheets.Name就是工作表的名称,名称依次等于1日、2日、3日……此时通过For Next循环,让i变量随着循环次数变更来实现。

Sheets(Sheets.Count).Name = i & "日"

将刚刚说的内容综合起来代码就出来了。

还有一个小问题,就是在每个表的A2生成日期。

Sheets.Range代表某个表的单元格,日期前面部分是固定的为 "2020/6/" 再连接变量i就可以。

Sheets(Sheets.Count).Range("a2") = "2020/6/" & i

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

Sub rb()

Dim i As Integer

For i = 1 To 30

    Sheets("模板").Select

    Sheets("模板").Copy After:=Sheets(Sheets.Count)

    Sheets(Sheets.Count).Name = i & "日"

    Sheets(Sheets.Count).Range("a2") = "2020/6/" & i

Next

End Sub

Step 03 将复制的模板手工删除掉,运行代码,即可生成日报。

在写VBA代码的时候,不区分大小写,会自动帮你更正。很多单词也可以不用记住,在输入的时候会自动提示,按Tab键可以补齐。其实就跟写函数一样。

最后,如果需要按月汇总30个表格,也很简单,因为是VBA生成的格式都一样,只需一个SUM函数就解决。

=SUM('1日:30日'!B4)

写代码的时候,你某些语句不懂写,可以录制一个宏,这样就会将难度降低,平常我都是这样做。

将录制宏学好了,后面再慢慢接触一些新语句,其实需要记住的新语句也没多少。最常用的就是循环语句For Next。

陪你学Excel,一生够不够?


一次报名成为VIP会员,所有课程永久免费学,永久答疑,仅需 1500 元,待你加入。

报名后加卢子微信chenxilu2019,发送报名截图邀请进群。

推荐:公式改到哭,那就用For Next循环全搞定!
上篇:VLOOKUP函数滚一边去,我才是Excel真正的查找之王!

请把「Excel不加班」推荐给你的朋友

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多