在知乎有过一个投票调查「职场中最应该学的办公软件是什么」,有近七成的人认为,最该学的是 Excel。
为什么要学Excel?
几乎所有行业、公司、岗位,都需要用到Excel。
可能,有小伙伴也许会说,Excel很简单啊,不就是输入数字,然后加减乘除嘛,这是计算器都能完成的工作啊,这有什么好学的?
事实上,Excel的功能强大得让你完全无法想象!比如说今天我刚刚做完的《人事信息动态看板》就是典型的动态报表,一键生成。只要改一下参数,报表数据就能自己直接变!

《人事信息动态看板》主界面
今天这个小需求,说起来也很简单,就是把一张很大的表,通过筛选过滤出想要的一个数据,(就是右上角的“生日提醒”、“合同提醒”、“证件提醒”、“退休提醒”这几个功能报表)。可面临的问题一是要经常筛选,二是筛选完毕以后,还要删除一些列。长此以往显得特无聊,特笨。于是我就做成了四个小按钮 ,一键生成所需报表。
目标数据是一个拥有二十几列1000多行的人事数据表,如下图所示,想要通过某一列筛选出小表格出来,同时只要某些列。

原始数据行多、列多,不好找
要的结果如下:

需要将符合要求的数据整理到一列
于是乎,想通过VBA代码实现快速完成。在开始的时候想模仿手工操作,先筛选,然后复制,最后删除列来做,但是想想看,数据量并不是特别大,所以斗胆用了循环来做,代码如下:
Sub 生日提醒()
'清除原有数据
Sheet3.Range("a4").CurrentRegion.Offset(1, 0).Clear
Sheet1.Select
I = 0
r = 2
Dim Arr(10000, 6)
Do While r < 10000
If Cells(r, 1) = "" Then Exit Do
If Cells(r, 4) = "在职" And Month(Cells(r, 15)) = Range("月份") Then
Sheet3.Cells(I, 1) = Cells(r, 1)
Sheet3.Cells(I, 2) = Cells(r, 2)
Sheet3.Cells(I, 3) = Cells(r, 3)
Sheet3.Cells(I, 4) = Cells(r, 6)
Sheet3.Cells(I, 5) = Cells(r, 7)
Sheet3.Cells(I, 6) = Cells(r, 15)
I = I + 1
End If
r = r + 1
Loop
Sheet3.Visible = True
Sheet3.Select
MsgBox "总共" & I & "人,已经生成完毕", , "凌动报表设计"
End Sub
可是执行起来以后发现效率很低,差不多要四十几秒才能够完成一个操作,后来又加上一些调优的代码进去,调优代码如下:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
加上这几句话以后,速度大概提升了一倍,只需二十几秒了,可是仍然是觉得慢。
没办法,最后想到了用数组的方法来实现,执行完毕,发现效率太高了,一秒不到就做完了。通过数组减少对EXCEL的访问可以大大提高VBA的效率。
改进后的代码如下:
Sub 生日提醒()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'清除原有数据
Sheet3.Range("a4").CurrentRegion.Offset(1, 0).Clear
Sheet1.Select
i = 0
r = 2
Dim Arr(10000, 6)
Do While r < 10000
If Cells(r, 1) = "" Then Exit Do
If Cells(r, 4) = "在职" And Month(Cells(r, 15)) = Range("月份") Then
Arr(i, 0) = Cells(r, 1)
Arr(i, 1) = Cells(r, 2)
Arr(i, 2) = Cells(r, 3)
Arr(i, 3) = Cells(r, 6)
Arr(i, 4) = Cells(r, 7)
Arr(i, 5) = Cells(r, 15)
i = i + 1
End If
r = r + 1
Loop
Sheet3.Visible = True
Sheet3.Select
Range("a5").Resize(UBound(Arr), 6) = Arr
Range("a1").Select
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
MsgBox "总共" & i & "人,已经生成完毕", , "凌动报表设计"
End Sub
可是对于许多办公人员来说,写代码仍然是一件非常痛苦的事情,如果你是用了高士达云平台来做的话,这些代码都可以放弃不用了,直接通一个按钮快速生成你所需的报表,如果感兴趣可以跟我联系。
EXCEL里解决问题的办法依然是多种多样的,找到适合自己的方法,一劳永逸!
如果你喜欢我文章发的《人事信息动态看板》,你也可以私信跟我联系。感谢你的关注!