VBA 变量基础教程
在上一章《Excel VBA 基础》中,我们学习了一些基本的概念和操作。在一些教程中,出现了具体的 VBA 代码,你可能不是很明白。没关系,从本章《VBA 变量、类型和运算符》开始,我们就要具体学习 VBA 语法部分,带你进入真实的 VBA 世界,让你写出真正能用得到的代码。
本篇我们学习 VBA 最基本的一个概念,VBA 变量。
什么是 VBA 变量
VBA 变量是一个存储数据的 VBA 代码结构。变量存储的数据,可在程序运行过程中改变。又能代表它存储的数据,在程序中参与各类计算。
变量可以简单理解为 Excel 中的单元格引用地址,例如 A1。在公式中,A1 代表 A1 单元格内的数据,参与计算。
变量有两个重要的概念,变量名和变量类型。
- 变量名:代表变量的名称
- 变量类型:变量存储的数据的类型,例如数字、文本、逻辑值等。
声明变量
如果想在代码中使用变量,需要先声明,即给出变量名和变量类型。
声明变量使用以下语法:
Dim [变量名] As [数据类型]
Dim
和As
是 VBA 中声明变量需要使用的关键词。Dim
表示声明语句的开始,As
表示在它之后指定数据类型。
[变量名]
和[数据]
是,声明代码中可变部分,需要用户输入。
- [变量名] 就是该变量的名称
- [数据类型] 是该变量的数据类型
声明变量实例
我们看一个实际的例子,现在声明两个变量,一个是员工姓名、一个是员工年龄。
Dim name As String
Dim age As Integer
可以看到,name
和age
是变量的名称,String
是文本类型数据,代表员工姓名;Integer
是整数数据类型,代表员工年龄。
命名变量
上述部分我们学到了声明变量的基本语句,其中变量名是需要用户自己输入。VBA 中规定,变量命名需要符合以下条件,否则程序出错。
- 首字母必须以字母开头。
- 不能包含空格、.(英文句号)、!(感叹号)、@、&、$、# 等字符。
- 长度不能超过 255 个字符。
- 不能使用 VBA 中保存的关键词作为变量名。
以上是变量名必须符合的规则。符合规则的前提下,虽然可以随便命名,但在实际开发过程,建议按驼峰法命名。
驼峰法是一种很多编程语言通用的命名规则,优点是可读性高、易于理解。
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母。
例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
变量类型
变量的第二个重要元素是变量类型,即变量存储数据的数据类型。正确指定数据类型,可以使程序编写和运行效率更高,并且易于理解。
另外,指定数据类型后,如果赋值不同类型的数据,VBA 会提示错误,这样可以避免使用错误的数据。
VBA 中的数据类型主要分为三大类,一个是数字类型,一个是非数字类型,一个是通用类型。
数字类型
数字类型的变量顾名思义,均是以数字变量。不同类型其数据范围有区别。
类型 | 说明 | 数据范围 |
---|---|---|
Byte | 字节 | 0 至 255 |
Integer | 整数 | -32,768 至 32,767 |
Long | 长整数 | -2,147,483,648 至 2,147,483,647 |
Single | 单精度浮点数 | 在表示负数时: -3.402823E38 ~ -1.401298E-45 在表示正数时: 1.401298E-45 ~ 3.402823E38 |
Double | 双精度浮点数 | 在表示负数时: -1.79769313486231E308 ~ -4.94065645841247E-324 在表示正数时: 4.94065645841247E-324 ~ 1.79769313486231E308 |
Currency | 货币 | -922,337,203,685,477.5808 至 922,337,203,685,477.5807 |
Decimal | 定点数 | 未放置定点数: +/- 79,228,162,514,264,337,593,543,950,335 放置定点数: +/- 7.9228162514264337593543950335 |
非数字类型
非数字变量通常不能直接参与算术运算。
类型 | 说明 | 数据范围 |
---|---|---|
String | 文本类型 | 0 至 20亿字符 |
Boolean | 逻辑值 | True 或 False |
Date | 日期和时间 | 时间:00:00:00 至 23:59:59 日期: 100-1-1 至 9999-12-31 |
Object | 对象 | VBA 和 Excel 对象 |
通用类型
通用数据类型,指的是可存储任何类型的数据。在程序运行过程,VBA 可以自动识别数据类型,参与计算。
类型 | 说明 | 数据范围 |
---|---|---|
Variant | 任意类型 | 不限 |
Variant 类型虽然灵活,但是它会占用更多内存空间,执行效率也会受影响。因此建议,在明确知道数据是何种类型时,指定数据类型;如果数据类型是可变的或不明确,使用 Variant 类型。
给变量赋值
关于变量的基础知识学完了,接下来就是如何给变量赋值。
给变量赋值很简单,使用以下语法:
[变量名] = [数据]
赋值语法核心就是 =
(等号),变量在左侧,数据在右侧。可以理解为变量等于赋值的数据。
一个值得注意的点是,[数据]的形式。
- 数据可以是直接书写的内容,例如 2、”学校”、True等。
- 也可以是另外一个变量
给变量赋值完成后,在后续的程序中,就可以使用变量参与各类计算。
我们看一下具体的例子。
Dim name As String
name = "张三"
Range("A1") = name
以上代码,先声明了 name
变量,数据类型为文本。然后给它赋值了张三
文本。最后将name
变量的数据,写入到工作表 A1 单元格。
总结
本篇主要介绍了 VBA 中的最基本的概念,变量。因为变量的值在程序运行过程中可以变化,因此使程序效率大大的提高。使用变量主要有3个步骤:
- 声明变量
- 指定变量的数据类型
- 给变量赋值
Range(“A1”) = name
麻烦问您一下,我不太明白这个不是说变量在左侧,数据在右侧么
那Range(“A1”) 他为什么在左侧呀
Range(“A1”)也是一个变量,代表A1单元格。但是他通过Range方法返回的一个无名变量,可以理解为如下过程:
一个无名变量 = Range(“A1”)
一个无名变量 = name
好懵
加油!
言简意赅,深入简出
谢谢大佬,很适合我这种初学者
非数字变量可以进行计算吗?例如(布尔量1*8+布尔量2*4)*(not 布尔量3)。我先要用这个计算值
可以参与,一般会自动转换为数字。但是需要注意,True 转换为 -1 值,False 转换为 0。
Sub mycode()
Name = “张三”
MsgBox Name
End Sub
制定数据类型干嘛
指定数据类型可以使代码更好维护、更易读,尤其是中大型项目中。
大佬太牛了^^
👍👍👍👍👍👍👍🤞
太有意思啦
Long 的最大取值为2147483647,差了一位数
感谢反馈,已修改
内容全面,很适合初学者!
感谢大佬
当我运行时提示“编辑错误:无效外部过程”是什么原因呢
本篇中的代码不能直接运行,必须放在一个过程或函数里。
请参考这篇文章:VBA 过程(Sub) 入门教程和实例
Mark,今天学习到这,感谢大佬
我再编写 name = “张三” 时,”张三”显示为:“??”, 请问是什么原因呢?
调整一下编辑器的字体试一试。
请教一下
Dim myFile$ As Workbook
这变量名里的$是必须的吗,这是什么类型变量?感谢
不是必须的。
$是文本类型的缩写,按理说不应该出现在你贴的这段代码。因为myFile已经指定类型为Workbook了。
很好,谢谢大佬
代码截图都是重叠的,看不完整,可否显示完整
不是很清楚表达的意思,可以进一步说明一下需求吗?
就是黑底色的代码截图重叠的
选择性粘贴,无格式粘贴。是这个意思吗?
可能是显示问题,我们查一下
在通用类型一节中
“因此建议,在明确知道数据时何种类型时,指定数据类型;如果数据类型是可变的或不明确,使用 Variant 类型。”
在明确知道数据时何种类型时,有字误,“时”该为“是”
已修改,感谢反馈
帮助很大,谢大佬分享
byte 应该不是比特,是字节
谢谢提醒,已更正