VBA利器让你的Excel如有神助

VBA利器让你的Excel如有神助

本篇是VBA的入门文章,大神请绕路。


先来列下日常工作中,我们经常遇到的一些问题:

  1. 作为公司财务岗、薪酬岗、产品运营岗等,是否每天、每周、每月都要花费好多个小时完成Excle的数据统计?
  2. 是否每次生成图表都进行重复性的手工操作,觉得很繁琐?
  3. 是否从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.点击展开模块,即可为我所用,非常的方便。


完!


后期更多精彩,敬请期待~

编辑于 2018-10-09 10:24