VBA利器让你的Excel如有神助
本篇是VBA的入门文章,大神请绕路。
先来列下日常工作中,我们经常遇到的一些问题:
- 作为公司财务岗、薪酬岗、产品运营岗等,是否每天、每周、每月都要花费好多个小时完成Excle的数据统计?
- 是否每次生成图表都进行重复性的手工操作,觉得很繁琐?
- 是否从Excel中敲了很多公式后,还要另外撰写ppt,生成图表,下个月有新的元数据又要重新生成一次?觉得效率低下。
。。。。。。
在这个时代,任何人工繁琐的操作,都想通过机器或者程序实现自动化。
答案是可以的,通过VBA,可以把十几个小时的工作在几分钟甚至几秒种就完成,大大提供工作效率。
什么是VBA?
Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。
换句人话来说就是:在Excel中想实现什么功能,就可以用VBA语言编写一段程序去完成。
什么是宏?
简单理解,就是一段编写好的程序,它能单独完成一项特定的功能任务。
那么,VBA到底能实现到什么程度呢?
大神已经指明了方向,他可以通过VBA,最后将Excel用成了中控界面,类似EMACS,在Excel可以随意操控全公司的打印机、Word、Powerpoint等等,自动完成各种任务以及数据更新和抓取。依靠VBA,在效率上是一般同事的数倍甚至是高一个量级,你说VBA还是不是办公利器!?
环境设置
excel文件默认不打开宏功能,会有提示:安全警告,宏已被禁用。
打开宏的方法:Excel中在选项——信任中心——信任中心设置——宏设置,选中启用所有宏。
另外Excel中在选项——自定义功能区——勾选开发工具,点击确定后,在Excel顶部即可看见开发工具的视图。
设置之后,就可以在状态栏中看到“开发工具”选项了
上手实操
如何进入编程环境?
第一种,直接在sheet标签右键,点击查看代码
第二种,通过快捷键Alt + F11
第三种,在开发工具栏,点击“Visual Basic”直接进入
第一个程序:认识这个世界。
Sub test()
MsgBox "Hello World!"
End Sub
Sub代表一个子过程,从开始到结束。
中间通过MsgBox,打印出“Hello World!”
点击三角形的执行按钮,即可完成。
实例演练一(通过宏实现计算)
我们找来一份Excel工资数据,如下图,包含学历、部门、职称、基本工资、津贴、奖金、水费、电费、管理费,实发工资未算。
如何一键计算好实发工资?
算法大都基于逻辑思路,只要把计算思路理清楚了,剩下的只是照着思路翻译成代码语言。
实发工资 = 基本工资 + 津贴 + 奖金 - 水费 - 电费 - 管理费
Sub 计算实发工资()
Dim n As Integer
Set sh = Worksheets("Sheet1")
n = 2
Do While sh.Cells(n, 1) <> ""
sh.Cells(n, 13) = sh.Cells(n, 7) + sh.Cells(n, 8) + sh.Cells(n, 9) - sh.Cells(n, 10) - sh.Cells(n, 11) - sh.Cells(n, 12)
n = n + 1
Loop
End Sub
在“开发工具”栏中点击插入一个按钮,命名为“一键计算工资”,
右键按钮,指定对应的宏,选择“计算实发工资”,点击确定。
此时,我们再点击“一键计算工资”按钮时,即可完成计算。
实例演练二(通过宏实现分类统计)
统计不同学历中,工资的发放比例,并单独生成统计数据。
当前的学历中,有本科、研究生、博生三类,分别对不同学历进行叠加统计,后续即可进一步完成饼图生成。
Sub 计算学历工资分布()
Dim i As Integer
Dim arrs(4, 2) As Variant
i = 1
'对40条数据进行遍历
For j = 2 To 41 Step 1
'对第四列学历数据进行统计
strname = Cells(j, 4)
isfind = False
k = 0
For k = 1 To 3
If arrs(k, 0) = strname Then
isfind = True
Exit For
End If
Next k
If isfind Then
'找到已有分类,直接进行相加
arrs(k, 1) = arrs(k, 1) + Cells(j, 13)
Else
arrs(i, 0) = Cells(j, 4)
arrs(i, 1) = Cells(j, 13)
i = i + 1
End If
Next j
'打印出汇总的数据
Cells(1, 15) = "学历分布"
Cells(1, 16) = "实发工资总计"
For k = 1 To 3
If arrs(k, 0) <> "" Then
Cells(k + 1, 15) = arrs(k, 0)
Cells(k + 1, 16) = arrs(k, 1)
End If
Next k
End Sub
指定宏后,即可自动计算生成统计数据,无需繁琐的编辑公式,快速生成。
已完成了两个最基本的实例操作,动手实操胜过一切。
还有个问题:我写好的宏程序,可以分享给别人使用吗?
答案:当然可以!
年纪大的喜欢说教,年轻人喜欢分享。
方法如下:
1.把我编写好的宏程序进行导出,导出格式为bas(basic文件),分享给别人
2.在一个新的Excel中把别人的bas文件进行导入
3.点击展开模块,即可为我所用,非常的方便。
完!
后期更多精彩,敬请期待~