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类型,比明确指类类型会占用更多的内存空间。