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

运行报错如下。

VBA 溢出


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

运行报错如下。

VBA 溢出


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。

运行报错如下。

VBA 溢出


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