VBA 数据类型基础教程

在介绍 VBA 变量的教程中,初步学习了数据类型相关知识。VBA 中虽然不强制指定数据类型,但是正确使用数据类型,可以使程序更易理解,也能提高程序的运行效率。

今天通过实际的代码例子,进一步学习 VBA 中的数据类型。

文本类型

文本类型可以说是最常用的数据类型。实际中,几乎所有的数据均是文本类型。因此理解好文本是学习 VBA 的基础。

类型 说明 数据范围
String 文本类型 0 至 20亿字符

首先,声明一个文本类型变量,String是类型标识符,语法如下:

Dim name As String

VBA 中,文本需使用英文双引号表示。

name = "Zhang San"

如果把数字两端加上双引号,它会变成文本类型,不再表示数字

name = "101"

可以使用单元格内的文本,给文本类型变量赋值。

name = Range("A1")

与 Excel 提供的文本函数一样,VBA 也提供多种文本函数,可直接在程序中使用,包括:

  • Format:格式化数据,并以文本类型返回
  • InStr:返回指定字符的位置
  • InStrRev:反方向返回指定字符位置
  • Left:返回左侧指定长度文本
  • Len:返回文本长度
  • LCase:大写字母转换成小写字母
  • LTrim:清除开头的空格
  • Mid:返回指定的开始和结束位置之间的文本
  • Replace:替换文本中的指定字符
  • Right:返回右侧指定长度文本
  • RTrim:清除末尾处的空格
  • Space:返回指定重复数的空格文本
  • StrComp:返回比较两个文本的结果
  • StrConv:将文本转换成指定格式
  • String:返回指定重复数的文本
  • StrReverse:逆转提供的字符串
  • Trim:清除开头和结尾处的空格
  • UCase:将小写字母转换成大写字母

每个函数的用法,在「内置函数」一章中详细介绍。

 

数字类型

数字类型是第二个基础数据类型。在写 VBA 代码时,应根据具体的数字大小,选择合适的数字类型。

如果小数字使用大范围数字类型存储,会浪费计算机内存;如果大数字使用小范围的数字类型存储,VBA 会自动转换成对应小范围数字,导致数字丢失精度。

VBA 中的数字类型包括如下几种。

类型 说明 数据范围
Byte 字节 0 至 255
Integer 整数 -32,768 至 32,767
Long 长整数 -2,147,483,648 至 2,147,483,648
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

其中,IntegerLongDouble是常用到的数字类型。

与文本相似,声明数字类型,使用如下语句:

Dim age As Integer

以上定义一个岁数变量,使用基本的 Integer 整数类型即可。

数字类型变量可以像数字一样,参与各类算数运算:

age = 3
age * 2 + 10 ‘-> 16

更多数字类型相关的内容,将在以后的教程中详细介绍。

 

逻辑类型

逻辑类型只有两个值,True 和 False,即真与假。

类型 说明 数据范围
Boolean 逻辑值 True 或 False

逻辑值虽然只有两个,但是在程序中有着广泛的应用。VBA 中判断语句中,经常能用到逻辑值。

首选,声明一个逻辑变量,使用如下语句:

Dim isPass As Boolean

给逻辑变量赋值时,可以直接使用逻辑值,也可以使用返回逻辑值的表达式。

isPass = False
isPass = 70 >= 60

 

日期和时间类型

VBA 中的日期和时间使用数字表示,整数部分代表日期,小数部分代表时间。

  • 日期从 100-1-1 开始到 9999-12-31。
  • 时间从 00:00:00 到 23:59:59。

声明日期类型变量,使用如下语句:

Dim birthday As Date
Dim time As Date

给日期变量赋值时,可以直接把日期放置在两个 # 之间赋值,也可以使用数字,还可以把日期作为文本赋值:

birthday = #2018-1-1#
birthday = 43101
birthday = "2018-1-1"

time = #12:00:00#
time = 0.5
time = "12:00:00"

 

Variant 类型

Variant 类型是一种通用类型,可以表示任何一种类型的数据。它也是声明变量未指定数据类型时的默认类型。

虽然 Variant 类型方便,但是相应的,占用更大的内存空间,也会影响程序运行效率。因此建议,在明确知道数据时何种类型时,指定数据类型;如果数据类型是可变的或不明确,使用 Variant 类型。

转载注明:文章转载自「懒人Excel - www.lanrenexcel.com
订阅评论
提醒
24 评论
最新
最旧 最多投票
内联反馈
查看所有评论
Mina
1 年 前
  • Trim:”清除开头和结尾处的文本”

应该是“清除开头和结尾处的空格,直到遇到第一个非空格字符。”

Yisay
1 年 前

为什么name = Range(“A1”)就可以直接提取到单元格A1中的值,而不需要使用name = Range(“A1”).Value,这在其他语言中,前者一般是直接赋值了一个对象,而在VBA中两种方法都可行?

洪有成
1 年 前

给逻辑变量赋值时(写成是了),可以直接使用逻辑值,也可以使用返回逻辑值的表达式(最后这句话不懂)。

是的是的
1 年 前

很好

qianshou
2 年 前

您好,vba中写range(“A2”)和cells(2,1)有什么区别吗

natalie
2 年 前

Sub mycode2()

Dim name As String

name = “Zhang San”
 
MsgBox “name”

End Sub

为什么我这里提示框弹出来的不是“Zhang San”呢?

初学者
2 年 前

日期和时间类型的显示状态不一样是因为什么
birthday = #1/1/2018#
time = #12:00:00 PM#

初学者
2 年 前
age * 2 + 10 ‘-> 16 这一行会报错误

稍微修改了一下
:
    Dim age As Integer
    Dim old As Integer
    
    age = 3
    old = age * 2 + 10 '-> 16
    
     Range("A2") = old
EJINU
2 年 前

为啥评论两次不给通过。。。Byte是字节,bit才是比特。。。1字节等于8比特。。。

潘子安
2 年 前

byte是比特吗?我印象中bit是来着。也可能是我记错了

EJINU
2 年 前
回复给  潘子安

对,byte是字节,bit才是比特。

EJINU
2 年 前
回复给  潘子安

byte是字节,bit是比特。你记对了。

最后由EJINU编辑于2 年 前
笑笑mm
3 年 前

age * 2 + 10 ‘-> 16
请问这里有个单引号,是什么意思?

笑笑mm
3 年 前
回复给  懒人Excel

明白,谢谢,以为是多出了一个单引号

cufu
3 年 前

加油加油!

24
0
希望看到您的想法,请您发表评论x