当前位置: 首页 > 办公技巧 > 正文

excel办公技巧日报(EXCEL日报、月报不发愁,再也不用一个个操作,一次全搞定)

  • 叁碗诸角 叁碗诸角
  • 办公技巧
  • 2023-08-09 08:04:24
  • 0

原创作者: 卢子 转自: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,已经连续学了4天。

留一个小练习给你,前面都是用具体数字,比如12这种,现在改成通用的,不管有多少表格,都可以提取到目录。


Sub 提取目录()

For i = 1 To 12

Sheets(1).Range("c" & i 1) = Sheets(i 1).Name

Next

End Sub



最新文章