VBA 常用内置数据类型
这里介绍VBA常用的内置数据类型,常见的整型Integer、字节型Byte、长整型Long、单精度小数Single、双精度小数Double、布尔型Boolean、字符串String、日期Date。
类别 | 数据类型 | 占用空间 (字节) | 范围 |
---|---|---|---|
整型 | Integer | 2 | -2^15 到 2^15 -1 即 -32,768 到 32,767 |
整型 | Byte | 1 | 0 到 2^8 -1 即 0 到 255 |
整型 | Long | 4 | -2^31 到 2^31-1 即 -2,147,483,648到2,147,483,647 |
小数 | Single | 4 | / |
小数 | Double | 8 | / |
布尔 | Boolean | 2 | True、Flse |
字符串 | String | / | / |
日期 | Date | 8 | 年份范围:100/1/1到9999/12/ 31 时间范围:0:00:00到23:59:59 |
变体 | Variant | / | / |
1 VBA Integer整型
整型Integer占用两个字节,即16位(1字节=8位)。
整型Integer表示的范围大小: -2^15 到 2^15 -1 ,即 -32,768 到 32,767。
示例代码如下:
Sub int1()
' Integer类型
Dim a1 As Integer
a1 = 32767
Debug.Print "a1:" & a1
Debug.Print "Integer变量占用内存空间大小(字节数): " & Len(a1)
End Sub
&:用于连接字符串,如果数据类型不是字符串,会转化为字符串。
Len(a1):求a1所占的存储空间,单位为字节数。
输出结果:
a1:32767
Integer变量占用内存空间大小(字节数): 2
溢出
如果值超出范围,会报错:“运行时错误'6':溢出”。
Sub int2()
' Integer变量数据溢出
Dim a1 As Integer
a1 = 32768
Debug.Print "a1:" & a1
End Sub
运行报错如下。
2 VBA Byte 字节型
字节型Byte占用1个字节,即8位(1字节=8位)。
字节型Byte只能表示0与正整数。
字节型Byte表示的范围大小: 0 到 2^8 -1 ,即 0 到 255。
示例代码如下:
Sub byte1()
' byte
Dim a1 As Byte
a1 = 255
Debug.Print "a1:" & a1
Debug.Print "Byte变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果:
a1:255
Byte变量占用内存空间大小(字节数): 1
溢出
如果值超出范围,会报错:“运行时错误'6':溢出”。
Sub byte2()
' byte
Dim a1 As Byte
a1 = -1
End Sub
运行报错如下。
3 VBA Long 长整型
长整型Long占用4个字节,即32位(1字节=8位)。
长整型Long表示的范围大小: -2^31 到 2^31-1,即 -2,147,483,648到2,147,483,647。
示例代码如下:
Sub long1()
' Long
Dim a1 As Long
a1 = 2147483647
Debug.Print "a1:" & a1
Debug.Print "Long变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果:
a1:2147483647
Long变量占用内存空间大小(字节数): 4
溢出
如果值超出范围,会报错:“运行时错误'6':溢出”。
Sub long2()
' Long
Dim a1 As Long
a1 = 2147483648
End Sub
保存后,会自动在数字后加#,即
a1 = 2147483648#
#表示双精度类型Double。
运行报错如下。
4 VBA Single 单精度小数
单精度小数Single占用4个字节,即32位(1字节=8位)。
单精度小数Single表示的范围大小:负数-3.402823E38~-1.401298E-45,正数1.401298E-45~3.402823E38。
示例代码如下:
Sub single1()
' Single
Dim a1 As Single
a1 = 2023.61
Debug.Print "a1:" & a1
Debug.Print "Single变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果:
a1:2023.61
Single变量占用内存空间大小(字节数): 4
科学计数法赋值
Sub single2()
' Single
Dim a1 As Single
a1 = 1.234567E+16 ' 科学计数法
Debug.Print "a1:" & a1
Debug.Print "Single变量占用内存空间大小(字节数): " & Len(a1)
End Sub
不建议使用Single,精度比较低,推荐使用精度更高的双精度小数Double。
5 VBA Double 双精度小数
双精度小数Double占用8个字节,即64位(1字节=8位)。
双精度小数Double表示的范围大小:负数-1.79769313486231E308~—4.94065645841247E-324, 正数4.94065645841247E-324~1.79769313486232E308。
Double类型声明字符为#。
Double比Single的精度更高,数值范围更大。
示例代码如下:
Sub double1()
' Double
Dim a1 As Double
a1 = 2023.61
Debug.Print "a1:" & a1
Debug.Print "Double变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果:
a1:2023.61
Double变量占用内存空间大小(字节数): 8
6 VBA Boolean 布尔型
布尔型Boolean占用2个字节,即16位(1字节=8位)。
布尔型Boolean 仅两个值:True 、 False 。
Sub boolean1()
' Boolean
Dim a1, a2 As Boolean
a1 = True
a2 = False
Debug.Print "a1:" & a1; ",a2:" & a2
Debug.Print "Boolean变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果:
a1:True,a2:False
a1占用内存空间大小(字节数): 4
a2变量占用内存空间大小(字节数): 2
7 VBA String简介
字符串类型包括两种:可变长度字符串与固定长度字符串。
1)可变长度字符串的声明:
Dim 变量 As String
字符串长度与赋值长度相同。
示例如下。
Sub string1()
Dim a1 As String
a1 = "hello,小步教程"
Debug.Print "a1:" & a1 & "end"
Debug.Print "a1的字符数: " & Len(a1)
End Sub
代码说明:
Len(字符串变量):返回字符串的字符数,英文中文都是分别各算1个字符。这里不是占用内存空间的字节数。
Len(整型变量):返回占用内存空间的字节数。
输出结果:
a1:hello,小步教程end
a1的字符数: 10
2)固定长度字符串的声明:
Dim 变量 As String * n
字符串的长度固定为n,不足则补空格,多余则去除后面多余部分。
示例代码如下:
Sub string2()
Dim a1 As String * 20
a1 = "hello,小步教程"
Debug.Print "a1:" & a1 & "end"
Debug.Print "a1的字符数: " & Len(a1)
End Sub
输出结果为:
a1:hello,小步教程 end
a1的字符数: 20
示例代码2。此时赋值长度超过声明长度。
Sub string3()
Dim a1 As String * 5
a1 = "hello,小步教程"
Debug.Print "a1:" & a1 & "end"
Debug.Print "a1的字符数: " & Len(a1)
End Sub
输出结果为:
a1:helloend
a1的字符数: 5
<TODO链接>查看字符串更多用法
8 VBA Date简介 日期简介
日期类型Date占用8个字节,即64位。
日期类型Date表示的年份范围为:100年1月1日到9999年12月31日,时间可以从0:00:00到23:59:59。
示例代码如下:
Sub date1()
Dim a1 As Date
a1 = #6/12/2023#
Debug.Print "a1:" & a1
Debug.Print "Date变量占用内存空间大小(字节数):" & Len(a1)
End Sub
日期赋值通过 #月/日/年#的格式进行赋值。
输出结果为:
a1:2023/6/12
Date变量占用内存空间大小(字节数):8
<TODO链接>查看字符串更多用法
9 VBA Variant
variant 中文意思:混合、变种。
Variant类型的变量可以表示多种类型的变量。如果赋值给Integer类型数据,则表示Integer类型;如果赋值给String类型数据,则表示String类型;等等。
Variant类型占用的内存空间也不固定。
声明
Dim 变量名 As Variant
或者
Dim 变量名
如果声明变量没有指定类型,即为Variant类型。
示例如下。
Sub variant1()
' Variant类型
Dim a1 As Variant
a1 = 2023 'a1指向Integer类型
Debug.Print "a1:" & a1
Debug.Print "a1类型:" & TypeName(a1)
Debug.Print "Variant变量占用内存空间大小(字节数): " & Len(a1)
a1 = 2023.61
Debug.Print
Debug.Print "a1:" & a1 ' a1指向Double类型
Debug.Print "a1类型:" & TypeName(a1)
Debug.Print "Variant变量占用内存空间大小(字节数): " & Len(a1)
a1 = True
Debug.Print
Debug.Print "a1:" & a1 ' a1指向Boolean类型
Debug.Print "a1类型:" & TypeName(a1)
Debug.Print "Variant变量占用内存空间大小(字节数): " & Len(a1)
End Sub
输出结果如下:
a1:2023
a1类型:Integer
Variant变量占用内存空间大小(字节数): 4
a1:2023.61
a1类型:Double
Variant变量占用内存空间大小(字节数): 7
a1:True
a1类型:Boolean
Variant变量占用内存空间大小(字节数): 4
建议尽量不使用Varaint类型,比明确指类类型会占用更多的内存空间。