这篇文章是VBA系列专题的第一篇,干货满满,花费1周整理完毕,全文6160字,深度阅读时间大约25分钟,本文全面又深入浅出地讲解了VBA的基础知识,建议先点赞收藏再阅读。
本文按照如下的结构进行讲解。
1. 基本概念
1.1 为什么要学习VBA
1.2 VBA究竟是什么
2. 数据类型
2.1 数值型数据
2.2 字符串型数据
2.3 其它数据类型
3. 常量和变量
3.1 常量
3.2 变量
4. 运算符
4.1 算术运算符
4.2 赋值运算符
4.3 比较运算符
4.4 连接运算符
4.5 逻辑运算符
5. 程序结构
5.1 顺序语句
5.2 分支语句
5.3 循环语句
1. 基本概念
1.1 为什么要学习VBA
自动化操作。我们在使用Excel的过程中,经常会有这样的情况,会按照相同的方法完成信息录入,表格格式调整,信息处理,表格保存等简单、重复操作。我们可以使用VBA将这些操作转换为VBA程序代码,使工作自动化。
成果复用。Office中的应用程序可以共享VBA语言,如果你掌握了Word中使用VBA的方法,那么在Excel、PPT中使用Excel将变得非常容易,可以减少大量不必要的重复性工作,提高工作效率。
易于掌握。VBA的语法简单,学习门槛低。对于没有编程基础的小伙伴,依然可以录制宏来记录用户的各种操作,Office将自动将宏转换为VBA代码,非常容易掌握。(还不知道如何录制宏的小伙伴,请点击下方链接)
功能强大。VBA可以调用Excel自带函数(数学与三角函数、日期与时间函数、查找与引用函数、逻辑函数、统计函数、文本函数、数据库函数),还可以自定义函数。VBA可以处理多种类型的数据,数值型、逻辑型等等。VBA支持处理工作簿、工作表、单元格等。
1.2 VBA究竟是什么
在介绍VBA之前,首先介绍VB。VB(Visual Basic)是Basic的第四代语言,是一种可视化、面向对象的结构化高级程序语言。
VBA与VB是什么关系呢?
VBA是VB的一个子集,VBA是VB与Office的结合。
VBA是新一代标准宏语言,VBA是Visual Basic for Applications的缩写,是在Office中执行通用的自动化任务的编程语言。VBA可以用于Word、Excel、PPT。
VBA与VB有什么区别呢?
2. 数据类型
我们在使用VBA程序时,首先需要学习VBA的数据类型。根据数据的用途、类型的不同,VBA的数据类型可以划分为三大类:
2.1 数值型数据
字节型数据(Byte):存储为1字节,数值范围是0到255,用于存放少量的整数值。
整数型数据(Integer):存储为2字节,数值范围是-32768到32767,用于表示整数,是经常被使用的数据类型。
长整型数据(Long):存储为4字节,数值范围是-2147483648到2147483647,用于表示大型数据。
单精度浮点型数据(Single):存储为4字节,表示单精度浮点值,表示的负数范围是 -3.4 E38 ~ -1.4E-45,正数范围是: 1.4E-45~ 3.4E38
双精度浮点型数据(Double):存储为8字节,表示双精度浮点值,表示的负数范围是-1.7E308 到-4.9E-324,正数范围是4.9E-324到1.7E308。
2.2 字符串型数据
固定长度字符串:长度范围是1~64000个字符,长度是固定的。
可变长度字符串:长度范围是0~20亿个字符,长度是不固定的。
2.3 其它数据类型
日期型数据(Date):8个字节,表示范围:100年1月1日 - 9999年12月31日
货币型数据(Currency):8个字节
布尔型数据(Boolean):2个表示,表示范围:True和False
据说聪明的人在学习知识时,最喜欢做的事情就是双击屏幕。
3. 常量和变量
常量和变量是VBA中非常重要的两个概念,在程序执行过程中,不会发生改变的数据被称为常量,用于存储固定信息。会发生改变的数据被称为变量,用于存储临时保存的值。
3.1 常量
在编写程序的过程中,有些数据值不会改变,并且会在多个地方被引用,我们可以将他们定义为常量。
我们分两个步骤来讲解:第一步是声明,第二步是使用。
按照如下的语法格式进行声明
Const <符号常量> = <常量值>
下面的示例中,第1行代码就是声明1个常量,第5行代码就是如何使用这个常量。
Const Rate=0.52
Dim Result As Double
Dim Original As Double
Original=100
Result = Original * Rate
3.2 变量
在程序执行过程中,某些数值会发生变化,这些临时数值被称为变量。变量包含名称和数据类型两部分,通过变量名称就可以引用变量。
在使用变量之前,我们需要声明变量。
Dim 变量名 [As 数据类型]
在上面的声明语句中,Dim和As被称为声明变量的关键字。这里的变量名命名方式尽量与实际功能相符合,方便记忆。这里的数据类型请参考本文第2章。
这里举两个例子,第1句声明一个数据类型是整型的变量,变量名是Length,第2句声明一个数据类型是字符串的变量,变量名是SName。
Dim Length As Integer
Dim SName As String
4. 运算符
VBA程序是由一个个表达式组成的,而表达式是由操作数和运算符组成,这里的操作数可以是我们第3章介绍过的变量,也可以是常量。而运算符包括算术运算符、赋值运算符、比较运算符、连接运算符和逻辑运算符。
本章将对这些运算符逐个进行讲解。
4.1 算术运算符
算术运算符包括7种:加法、减法、乘法、除法、整除、指数、求余。
算术运算符4.2 赋值运算符
赋值运算符就是等号,赋值运算符可以给变量赋值,也可以给对象的属性赋值。例如:
Dim SName As String
SName = "Company"
4.3 比较运算符
比较运算符通常用于比较两个数值的大小,比较两个表达式的大小,比较运算符的输出结果是布尔型数据。布尔型数据包括True或False,如果比较结果是真,则为True,如果比较结果为假,则为False。
比较运算符4.4 连接运算符
连接运算符包括两种:&和+。连接运算符属于二元运算符,即运算符包括两个变量。
连接符&:不管什么类型的数据,&都将左右的变量当成是字符串,并将这两个字符串进行连接。
连接符+:当参与连接运算的两个变量是字符串时,+号才完成字符串连接的作用,否则被当成加法运算符。
举例说明:
SName="Today"&"_Duty",输出结果:SName=Today_Duty
SSequence="300"+"_180",输出结果:SSequence=300_180
4.5 逻辑运算符
逻辑运算符用于执行表达式之间的逻辑操作,结果是布尔型数据。常用的逻辑运算符包括“逻辑与”、“逻辑或”,“逻辑非”,“逻辑异或”。
逻辑运算符当您看到这里的时候,说明您距离掌握VBA基础知识只差最后一步了,那就是双击屏幕。
5. 程序结构
学过C语言的同学们都知道,在C语言中,具备三种类型的程序结构:顺序结构、分支结构和循环结构。在VBA中也是一样,使用这三种程序结构就可以实现我们的算法处理流程
5.1 顺序语句
顺序结构是最基本的语句,顺序结构就是按照程序中的语句顺序逐条依次执行,顺序结构包括两种语句:赋值语句和声明语句。
赋值语句和声明语句,我们已经在前面详细介绍了,这里不再赘述。
5.2 分支语句
在实际程序执行的过程中,语句的执行顺序可能根据某些条件语句来判断。常见的条件语句包括单分支IF语句结构、双分支IF语句结构、多分支IF语句结构、Case语句结构。
单分支IF语句结构
在单分支IF语句结构中,当IF表达式执行结果为True时,执行后面的语句组,当表达式执行结果为False时,则直接跳过后面的语句组,语句执行流程如下图所示。
单分支IF语句结构在程序中,我们使用下面的语法格式。
IF <条件表达式> Then
<语句组1>
End IF
双分支IF语句结构
我们在实际应用场景中,可能会遇到这样的情况,当不满足条件时,我们也需要执行某些语句组。当满足条件表达式时,执行语句组1,当不满足条件表达式时,执行语句组2。
双分支IF语句结构在程序中,我们使用下面的语法结构
IF <条件表达式> Then
<语句组1>
Else
<语句组2>
End IF
多分支IF语句结构
有时候我们的逻辑决策不是一条,而是多条,我们在程序执行过程中,需要完成逻辑决策树的梳理。
实际的逻辑决策树执行流程是这样的:
1)当满足条件表达式1时,执行语句组1,当不满足条件表达式1时,跳转到第2)句;
2)当满足条件表达式2时,执行语句组2,当不满足条件表达式2时,跳转到第3)句;
3)...
4)当满足条件表达式N时,执行语句组N,当不满足条件表达式N时,执行语句组N+1。
在程序中,我们使用下面的语法结构:
IF <条件表达式1> Then
<语句组1>
Else IF <条件表达式1> Then
<语句组1>
...
...
Else IF <条件表达式N> Then
<语句组N>
Else
<语句组N+1>
Else
Case语句结构
我们刚刚学习了使用IF语句实现多分支IF语句结构,学过C语言的同学都知道,使用Case语句也可以完成多分支语句结构。
实际的逻辑决策树执行流程是这样的:
1)当满足条件表达式1时,执行语句组1,当不满足条件表达式1时,跳转到第2)句;
2)当满足条件表达式2时,执行语句组2,当不满足条件表达式2时,跳转到第3)句;
3)...
4)当满足条件表达式N时,执行语句组N,当不满足条件表达式N时,执行语句组N+1。
Case语句结构在程序中,我们使用下面的语法结构:
Select Case 测试表达式
Case <条件表达式1>
<语句组1>
Case <条件表达式2>
<语句组2>
...
...
Case <条件表达式N>
<语句组N>
Case Else
<语句组N+1>
End Select
5.3 循环语句
我们在实际的VBA应用程序中,可能会遇到反复多次处理的问题,我们可以将这些反复处理的语句提取出来,再用循环语句进行嵌套。
循环语句总共包括三类:For-Next语句、Do-Loop语句、While-Wend语句。其中For-Next语句用于循环次数已知的情况,Do-Loop语句和While-Wend用于循环循环次数未知的情况。
For-Next语句
在VBA中,For-Next语句的实际执行情况是这样的:
1)用初值给循环变量赋值;
2)判断循环变量是否超过终值,如果循环变量超过终值,则退出For循环,如果循环变量未超过终值,则执行第3)步;
3)执行循环体,循环变量=循环变量+步长。
用流程图进行描述如下:
在程序正常执行的情况下,For-Next循环次数是确定的,循环次数= 终值-初值)/步长+1。
我们在程序中,是这样进行调用的:
For <循环变量> = <初值> To <终值> ( Step < 步长>)
<语句组1>
Next <循环变量>
Do-Loop语句
Do-Loop语句应用于循环次数未知的情况,主要包括4种循环语句:Do-While-Loop循环语句、Do-Until-Loop循环语句、Do-Loop-While循环语句、Do-Loop-Until循环语句。
(1)Do-While-Loop循环语句
程序实际执行流程是这样的:
1)先判断循环条件是否成立;
2)如果成立,则执行语句组1;
3)如果不成立,则跳出循环。
在调用程序语句时,结构是这样的:
Do While <循环条件>
[循环语句]
Loop
(2)Do-Until-Loop循环语句
程序实际执行流程是这样的:
1)先判断循环条件是否成立;
2)如果不成立,则执行语句组1;
3)如果成立,则跳出循环。
Do Until <循环条件>
[循环语句]
Loop
(3)Do-Loop-While循环语句
程序实际执行流程是这样的:
1)先执行循环体;
2)判断循环条件是否成立;
3)如果成立,则继续执行;
4)如果不成立,则跳出循环。
Do
[循环语句]
Loop While<循环条件>
(4)Do-Loop-Until循环语句
程序实际执行流程是这样的:
1)先执行循环体;
2)判断循环条件是否成立;
3)如果不成立,则继续执行;
4)如果成立,则跳出循环。
Do
[循环语句]
Loop Until<循环条件>
While-Wend语句
While-Wend语句同样适用于循环次数未知的情况。
程序实际执行流程是这样的:
1)先判断循环条件是否成立;
2)如果成立,则执行语句组1;
3)如果不成立,则跳出循环。
在调用程序语句时,结构是这样的:
While <循环条件>
[循环语句]
Loop