wincc生成excel报表 (excel账本自动生成报表)

在知乎有过一个投票调查「职场中最应该学的办公软件是什么」,有近七成的人认为,最该学的是 Excel。

为什么要学Excel?

几乎所有行业、公司、岗位,都需要用到Excel。

可能,有小伙伴也许会说,Excel很简单啊,不就是输入数字,然后加减乘除嘛,这是计算器都能完成的工作啊,这有什么好学的?

事实上,Excel的功能强大得让你完全无法想象!比如说今天我刚刚做完的《人事信息动态看板》就是典型的动态报表,一键生成。只要改一下参数,报表数据就能自己直接变!

excel如何快捷生成数据图表,excel如何一键生成表格

《人事信息动态看板》主界面

今天这个小需求,说起来也很简单,就是把一张很大的表,通过筛选过滤出想要的一个数据,(就是右上角的“生日提醒”、“合同提醒”、“证件提醒”、“退休提醒”这几个功能报表)。可面临的问题一是要经常筛选,二是筛选完毕以后,还要删除一些列。长此以往显得特无聊,特笨。于是我就做成了四个小按钮 ,一键生成所需报表。

目标数据是一个拥有二十几列1000多行的人事数据表,如下图所示,想要通过某一列筛选出小表格出来,同时只要某些列。

excel如何快捷生成数据图表,excel如何一键生成表格

原始数据行多、列多,不好找

要的结果如下:

excel如何快捷生成数据图表,excel如何一键生成表格

需要将符合要求的数据整理到一列

于是乎,想通过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里解决问题的办法依然是多种多样的,找到适合自己的方法,一劳永逸!

如果你喜欢我文章发的《人事信息动态看板》,你也可以私信跟我联系。感谢你的关注!