文章目录

  • VBA宏编程简介
  • 准备工作
    • 打开宏功能
    • 打开“开发工具”选项卡
  • VBA编程
    • 示例任务介绍
    • 文件宏
    • 全局宏

VBA宏编程简介

VBA编程是Office系列软件自带的编程功能,也就是说不只是Excel,Word和PPT也能进行VBA编程。而“”可以理解为一组自动化程序,执行一个宏就能执行其对应的一系列操作。创建宏主要有两种方法,一种是录制宏,也就是将人的一些操作录下来,需要的时候执行宏就可以自动重复这些操作;另一种就是本文要介绍的,通过VBA编程来自己写一个宏。

准备工作

Excel默认是没有打开宏功能和VBA编程功能的,因此需要打开一下。

打开宏功能

依次点击【文件】→\rightarrow→ 【选项】→\rightarrow→【信任中心】→\rightarrow→【信任中心设置】→\rightarrow→【宏设置】→\rightarrow→【启用所有宏】

打开“开发工具”选项卡

依次点击【文件】→\rightarrow→ 【选项】→\rightarrow→【自定义功能区】找到“开发工具”,并把它添加到右边

VBA编程

示例任务介绍

该任务分两个sheet,其中Sheet1为学生的分数,Sheet2为对Sheet1的信息进行分类统计,具体如下:


第一个表起名为“分数”,第二个表起名为“统计”

文件宏

  1. 依次点击【开发工具】→\rightarrow→【Visual Basic】

    左侧看到如上图所示目录,双击【Sheet1】、【Sheet2】、【ThisWorkbook】都可以打开编程窗口,但程序作用范围不一样,由于我们需要操作两个Sheet,因此双击【ThisWorkbook】打开。这里大家可能能猜到了,Workbook指的就是这个Excel文件。
  2. 编写如下程序
Sub 分类统计()Dim maleCtr As Integer '男生人数Dim femaleCtr As Integer '女生人数Dim daCtr As Integer '名字以达结尾人数Dim maleSum As Double '男生总分Dim femaleSum As Double '女生总分Dim i As Integeri = 2Do While Not IsEmpty(Sheet1.Range("A" & i))Dim name, sex As StringDim score As Doublename = Sheet1.Range("A" & i)sex = Sheet1.Range("B" & i)score = Sheet1.Range("C" & i)If sex = "男" ThenmaleCtr = maleCtr + 1maleSum = maleSum + scoreElsefemaleCtr = femaleCtr + 1femaleSum = femaleSum + scoreEnd IfIf name Like "*达" Then  'like是相似的意思,*为通配符daCtr = daCtr + 1End Ifi = i + 1 '下一行LoopSheet2.Range("A2").NumberFormatLocal = "0"    '设置数字格式为没有小数Sheet2.Range("B2").NumberFormatLocal = "0.##"    '设置数字格式为小数点后两位,非零才显示Sheet2.Range("C2:E2").NumberFormatLocal = "0.00"   '设置数字格式为小数点后两位且补零Sheet2.Range("A2") = maleCtrSheet2.Range("B2") = femaleCtrSheet2.Range("C2") = daCtrSheet2.Range("D2") = maleSum / maleCtrSheet2.Range("E2") = femaleSum / femaleCtrEnd Sub
  • 下面对程序进行一些说明,首先Sub 宏名称()...End Sub里“宏名称”改成任意你想要的宏名称即可,但不可以有空格。
  • Dim 变量名 As 数据类型是Visual Basic语言定义变量的方式,其中常用的数据类型有Integer整数、Double小数、String字符串、Date日期。
  • Visual Basic语言中单引号'后面的为注释内容,即程序之外的文本,不参与程序的运行,一般用来写一些解释说明,方便程序的理解。如程序中Dim maleCtr As Integer '男生人数maleCtr这个整数类型的变量用于累加Sheet1中男生的人数。
  • Do While 逻辑条件 ... Loop是Visual Basic中的循环语句之一,当逻辑条件为真时进入循环,当逻辑条件为假时退出循环。本程序中这个循环是为了一行行遍历Sheet1这张表,直到最后一个学生。因此我们需要判断变量i什么时候到最后一行。这里采用的逻辑条件Not IsEmpty(Sheet1.Range("A" & i)),其中IsEmpty()是用于判断是否为空,为空时返回true,否则返回false,但我们希望当不为空时继续循环,因此前面加个Not用于取反
  • Sheet1.Range("A1" )可以用于取出Sheet1中A1格里面的内容,此外还可以用Sheets(1).Range("A1" )Sheets("分数").Range("A1" )
  • "A" & i是将字符串"A"和整数i拼接起来,随着i=i+1的累加,这个程序中会依次遍历"A2""A3"一直到退出循环。
  • Visual Basic常用的逻辑判断语句如下,当逻辑条件1满足时执行程序1,都不满足时执行程序3,其中Elseif 逻辑条件 Then的数量不限。
If 逻辑条件1 Then
... 程序1
Elseif 逻辑条件2 Then
... 程序2
Else
... 程序3
End If
  • name Like "*达"的意思是name这个字符串的内容是否以“达”结尾,其中“*”为通配符,可以表示任意长度的任意内容,如果写成"*达*"意思就是名字中间是否有"达"。
  • Sheet2.Range("A2").NumberFormatLocal = "0"是设置数字单元格的显示格式,例如可以有"0.0""0.##""0.00%"等各种你想要的格式。这里的0和#都是一个代号,0代表即便这一位上没有数字也要显示一个0;#代表这一位如果有数字就显示,没有就不显示;%结尾会自动转成百分比显示,具体可以看Excel的帮助或是这个链接:Excel自定义格式。上述代码中为了展示不同的格式才这么写,实际上整数就用"0",两位小数就用"0.00"即可。
  • Sheet2.Range("A2") = maleCtr大家肯定都能猜到了,这是往Sheet2中对应的单元格里填数。这里Range()其实可以选多个单元格,就如上面设置格式的时候就用过多选:Sheet2.Range("C2:E2").NumberFormatLocal = "0.00"
  1. 点击绿色的小三角就可以运行这个程序了,保存程序的时候可能会提示为无法保存,这时候将Excel文件另存为带宏的格式即可,例如xlsm格式。

  2. 这时,点击【开发工具】→\rightarrow→【宏】也能找到我们编写的宏,点执行就能运行,但我们可以看到,这里宏的位置为“ThisWorkbook”,也就是我们打开的这个Excel文件,在别的文件里是无法运行这个宏的。

  3. 运行结果如下:

  4. 如果想调试程序,点击【调试】→\rightarrow→【逐语句】即可一行一行运行程序,将鼠标放到对应变量上可以看到它们的值,这样程序运行结果不对时就可以用于寻找BUG。

全局宏

上面我们提到,通过【Visual Basic】进入编程界面编写的宏是属于单个文件或Sheet的,如果我们想编写一个可以在所有文件中运行的宏要怎么做呢?下面是具体做法。

  1. 点击【开发工具】→\rightarrow→【录制宏】
  2. 宏名称随意,保存在必须选择【个人宏工作簿】,这个工作簿就是这台电脑共享的宏保存位置,具体位置为C:\Users\【用户名】\AppData\Roaming\Microsoft\Excel\XLSTART,里面有一个文件叫PERSONAL.XLSB。共用的宏就保存在这里,通过将这个文件发给别人覆盖对应的文件就可以把共用的宏给别人用了。如果是文件自带的宏,只需要把Excel文件发给对方就可以,文件已经自包含了。
  3. 点【确定】,这时可能会提示文件必须打开,那我们就把PERSONAL.XLSB这个文件打开后再来一次。
  4. 这次点【确定】可以录制了,事实上什么都无需录,直接点【停止录制】即可,我们只想要个壳而已。
  5. 点击【宏】,找到我们刚才录制的这个宏,点击【编辑】。
  6. 我们会看到这个宏保存在【PERSONAL.XLSB】这个分支的【模块】分支下面,如果是第一次录制就是【模块1】,对于我来说是【模块2】。我们将前面的程序复制一下,然后替换掉这个空的宏里的所有代码。
  7. 仅仅是将代码复制过来是不够的,因为这个宏是共用的,代码中Sheet1等变量的指代不明,不知道是哪个Excel文件中的Sheet1,因此我们做些小的修改。直接查找替换,将Sheet1都替换成ActiveWorkbook.Sheets(1);将Sheet2都替换成ActiveWorkbook.Sheets(2)即可。这里顾名思义,ActiveWorkbook就是指当前激活的那个Excel文件,因此想在哪个文件运行宏,就从那个文件执行宏即可。记得点保存,最终完整代码如下:
Sub 分类统计()Dim maleCtr As Integer '男生人数Dim femaleCtr As Integer '女生人数Dim daCtr As Integer '名字以达结尾人数Dim maleSum As Double '男生总分Dim femaleSum As Double '女生总分Dim i As Integeri = 2Do While Not IsEmpty(ActiveWorkbook.Sheets(1).Range("A" & i))Dim name, sex As StringDim score As Doublename = ActiveWorkbook.Sheets(1).Range("A" & i)sex = ActiveWorkbook.Sheets(1).Range("B" & i)score = ActiveWorkbook.Sheets(1).Range("C" & i)If sex = "男" ThenmaleCtr = maleCtr + 1maleSum = maleSum + scoreElsefemaleCtr = femaleCtr + 1femaleSum = femaleSum + scoreEnd IfIf name Like "*达" Then  'like是相似的意思,*为通配符daCtr = daCtr + 1End Ifi = i + 1 '下一行LoopActiveWorkbook.Sheets(2).Range("A2").NumberFormatLocal = "0"    '设置数字格式为没有小数ActiveWorkbook.Sheets(2).Range("B2").NumberFormatLocal = "0.##"    '设置数字格式为小数点后两位,非零才显示ActiveWorkbook.Sheets(2).Range("C2:E2").NumberFormatLocal = "0.00"   '设置数字格式为小数点后两位且补零ActiveWorkbook.Sheets(2).Range("A2") = maleCtrActiveWorkbook.Sheets(2).Range("B2") = femaleCtrActiveWorkbook.Sheets(2).Range("C2") = daCtrActiveWorkbook.Sheets(2).Range("D2") = maleSum / maleCtrActiveWorkbook.Sheets(2).Range("E2") = femaleSum / femaleCtrEnd Sub
  1. 在想要执行宏的Excel文件中点击【宏】,这时就可以看到我们刚才写的宏了,点击【执行】就可以运行。

文科生也能学会的Excel VBA 宏编程入门相关推荐

  1. vba ado 执行多条mysql 语句,Excel VBA+ADO+SQL入门教程003:SQL查询中字段技巧的总结...

    原标题:Excel VBA+ADO+SQL入门教程003:SQL查询中字段技巧的总结 本章概要: 1,几个概念 1.1, 数据库和Excel工作簿 1.2,数据表和Excel工作表 1.3,记录.字段 ...

  2. vba 保存word里面的图片_笔记7 【office精华课】一套课程学会Word+Excel+PPT(一)【Word】(2020年第37周 周五)...

    [office精华课] <一套课程学会Word+Excel+PPT> 课程目录:(总时长合计:28:56:25) =================================== [ ...

  3. zemax 宏怎么编写数组_编写Excel VBA程序的10个技巧

    学习Excel技术,关注微信公众号: excelperfect 学会一些有趣的技巧或想法,能够有效地提高ExcelVBA编程水平.下面是chandoo.org总结的编写Excel VBA程序的10个技 ...

  4. vba怎么安装_VBA还要学吗?怎么入门Excel VBA?

    教程领到手,学习不用愁!领 ↑↑↑ 快捷高效入门:看知识兔视频课程,跟着知识兔老师操作,听知识兔老师讲解,边看边实练,初学者不要自己瞎琢磨瞎折腾,很容易走弯路.学以致用,光看不练都是假把式.学完知识兔 ...

  5. excel vba 如何将日期周几转换成文字_Excel 从精通到入门

    Excel 从精通到入门 引子 Excel? 这么简单的东西有学的必要吗?公式加减乘除,诶等等这个日期怎么变成 #### 了,虽然文本数字搞不清楚,但也算熟练使用 Excel 啦. WOW, Awso ...

  6. 来吧!带你玩转 Excel VBA

    来吧!带你玩转 Excel VBA(含CD光盘1张)(双色)(附带近500个VBA思考练习题,Exceltip.net出品) 罗刚君  杨嘉恺编著 ISBN 978-7-121-20627-6 201 ...

  7. 来吧 带你玩转 Excel VBA

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 来吧!带 ...

  8. Excel VBA基础教程

    1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WOR ...

  9. Excel+VBA+之快速上手

    第一章  VBA语言基础  第一节 标识符  一.定义  标识符是一种标识变量.常量.过程.函数.类等语言构成单位的符号,利用它可以完成对变量.常 量.过程.函数.类等的引用.   二.命名规则  1 ...

  10. Excel+VBA+之快速上手(2)

    三.图表格式设置  对于图的格式设置,一般是录制一个宏,再删除不需要的语句,这样是开发者最省事的方法.在本节 的示例中有详细的格式设置,可以更改坐标轴的名礀,大小范围,刻度大小等.对不清楚的图的类型名 ...

最新文章

  1. 什么样的数学问题可以“下金蛋”?
  2. Altium Designer隐藏或显示元件名字
  3. BadTunnel:跨网段劫持广播协议
  4. ACPI引起linux系统无故重启
  5. html+仿百度外卖地址选择,百度外卖选择地址中的地图功能是怎么实现的?
  6. android 刷新view位置,Android View刷新机制实例分析
  7. flask mysql pymysql_在 flask 中使用 pymysql 报错,望大神解答!感激不尽!
  8. esc centos 安装mysql_CentOS7安装Mysql
  9. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  10. 浅谈http协议六种请求方法,get、head、put、delete、post、options区别
  11. HTML基础-李南江
  12. netware php_Apache MPM netware
  13. 安排座位 java_座位安排(seat)
  14. scrapy介绍及使用
  15. word文件打不开怎么办?显示的是:调试,发送错误报告,不发送
  16. Pixelmator for Mac(全能图像编辑软件)
  17. 多波束测深系统工作原理及组成,多波束在无人船上的应用
  18. ps如何制作宇宙星空梦幻人像照片效果
  19. tensorflow的slim调用预训练模型的权重进行迁移学习的一些感触
  20. 更新win10后连接WIFI时,提示“无法连接到这个网络”

热门文章

  1. python 模拟键盘输入编辑_python 模拟键盘输入
  2. java dht 爬虫_DHT爬虫(golang版-附源码)
  3. linux教程第六章,linux教程第六章.ppt
  4. 《乐高EV3机器人搭建与编程》——2.1 零件储存箱
  5. 国家软考--高级系统分析师证书
  6. 瑞利信道,莱斯信道和高斯信道模型
  7. Linux实现倒计时显示时分QT,qt实现倒计时示例
  8. require smarty.class.php 报错,Smarty 报错
  9. 安装SQLServer2016出错提示:需要安装oracle JRE7 更新 51(64位)或更高版本2种解决办法.
  10. 安装alexa工具条报毒