
VBA编程知识点(1)——数据类型
学习自杨洋老师《全民一起学VBA》
1. 数据类型
声明变量时,一般要使用“dim 变量 as 数据类型”语句,确定变量的数据类型。这样做的好处是减少内存占用,提高程序运行速度。如果没有使用As指定一个变量的类型,那么该变量被默认属于一种特殊类型——变体类型Variant。
变体类型的实现原理:
(1)用一个最大尺寸的内存单元存放数据;
(2)每次重新为变量赋值时,根据数据类型调整自身标识。
这样方便了代码的编写,但增大了内存占用,降低了程序运行速度。更严重的是,变体类型每次调整自身标识时,可能并不是我们希望的类型。
2. 自动类型转换
为编程方便,降低初学的难度,vba提供了自动类型转换的功能。
当把数据赋值给不同类型的变量时,VBA首先尝试将其转换成该类型。如果确实无法转换,再提示“类型不匹配”错误。
自动类型转换是默认功能,虽然好,但有时候也容易使人产生困惑。
示例1:
Dim a as integer
a = "23" 可以转换为数字23,赋值成功
a = "你好" 不能转换为任何数字,提示出错
示例2:
处理数据如下图所示:

代码如下
Sub 计算()
Dim i As Integer, a As Integer, b As Integer
For i = 3 To 7 Step 1
a = Cells(i, 1) '当运行到第6行时,字符类型的数字转换为integer类型
b = Cells(i, 2) '当运行到第6行时,字符类型的数字转换为integer类型
Cells(i, 3) = a + b
Next
End Sub
3. 数据类型关键字
文本——string
日期——date
逻辑——boolean
对象——object
变体——variant
数字——integer, byte, long, single, double, currency, decimal
Integer:占用内存2字节,不支持小数,取值范围-32768到+32767
Long:占用内存4字节,不支持小数,取值范围-2147483648到+2147483647
Double:占用内存8字节,支持小数,取值范围-1.798*10308~-4.9*10-324到+4.9*10-324~+1.798*10308。因为它使用了科学计数法,同时小数的位数又是灵活的,所以不够精确,结果可能会有误差。
Currency:占用内存8字节,支持小数,取值范围-922337203685477.5808~+922337203685477.5807。不过它的小数固定只有四位小数。因为小数只有四位,所以计算精确,没有误差。
4. 用符号标识数据类型
赋值语句的默认操作过程:
vba总是从右往左执行赋值操作。执行右边表达式时,vba会分配一个临时存储空间存放运算结果。这个临时存储空间的数据类型判断依据是参与运算的数据或变量的类型,其中最大的数据的类型就是该临时存储空间的数据类型。但除法运算操作例外,一律分配Double类型空间。这种判断方式可能带来溢出错误。如a = 20000 * 2赋值时,由于运算结果为40000,而临时存储空间判断为integer,就是发生溢出错误。
Integer——%
Long——&
Single——!
Double——#
Currency——@
String——$
这些符号可以声明数字和变量的类型,符号应该紧随数字或变量后面,不要空格。其中&又用于字符串的连接操作,&与数字或变量之间有空格表格连接运算,没有空格表示声明为long类型
示例:
Dim a&, b#等效于dim a as long, b as double
5. vba代码中的特别符号
下划线“_”表示把一行长代码分成若干行书写,“_”前需要有空格。但一个长字符串不能使用“_”来拆分成若干行。
示例:
If score > 60 and grade < 5 _
Or score > 80 and grade >= 5 _
Or score > 45 and category = "留学生" then
以上相当于一行代码。
冒号“:”表示将多个语句拼凑在同一行书写,“:”前后需要有空格。
示例:a = 1 : b = 2 : c = 3,这相当于三条赋值语句。
"^"表示乘方运算,有误差。
示例:a = 3 ^ 3
""表示整数除法,先做正常除法,然后只取商的整数部分作为运算结果。
"/"表示正常除法
示例:11 / 3 =3.66666666;11 3 = 3