VBA学习笔记42:数据类型与转换
学习资源:《Excel VBA从入门到进阶》第42集 by兰色幻想
一. 数据类型综述
在VBA中的数据类型有整数、文本、对象等类型。这些不同的类型有着特定的作用,在进行运算时也会占用不同大小的内存,所以我们在编写程序时为了提高运行效率,一般都要定义数据的类型。
之前也说过,因为不同数据类型的长度不一样,长度越长,占用的内存越长,所以选好合适的数据类型。
二、数据类型检查
- 检查是否为空
例:在A1单元格输入一个空格,对A1单元格进行判断是否为空:
(1)=""
Debug.Print Range("a1") = ""
返回结果为:True。
可以判别真空,但A1有空格,但结果却为真, = ""无法判断假空。
(2)Len函数
Debug.Print Len(Range("a1")) = 0
返回结果为:True。
一样,可判别真空,无法判断假空。
(3)IsEmpty函数
Debug.Print VBA.IsEmpty(Range("a1"))
返回结果为:False。
可以判断真假空。
(4)TypeName函数
Debug.Print VBA.TypeName(Range("a1").Value)
返回结果为:Empty
TypeName常用判断字符类型的函数,但遇到空格也判断不了是否为假空。
*在这里说一下为什么要强调真空和假空,比如在使用UsedRange,定位已使用单元格,如果有假空,就会使获取的已使用单元格区域不准确,这时可以先做个预判,是假空的单元格找出来清空内容,再进行后续操作。
2 检查是否为数字
例:在A1单元格输入3,对A1单元格进行判断是否为数字。
(1)IsNumeric函数
Debug.Print VBA.IsNumeric(Range("a1"))
返回结果为:True
Debug.Print Application.WorksheetFunction.IsNumber(Range("A1"))
返回结果为:True
可以调用VBA中的IsNumeric函数或者Excel中的函数,调用VBA的IsNumeric函数速度较快。
(2)TypeName函数
VBA.TypeName(Range("A1").Value)
返回结果为:Double
Double为双精度浮点型,数字类型的一种。
(3) Like "#" 和 Like "*#*"
Debug.Print Range("a1").Value Like "#"
返回结果为:True
Like "#" 判断其是否为一位整数。
Debug.Print Range("a1") Like "*#*"
返回结果为:True
Like "*#*" 判断其是否包含整数。
3 检查是否为文本
例:在A1单元格输入“a”,对A1单元格进行判断是否为文本:
(1)IsText函数
Debug.Print Application.IsText(Range("a1"))
返回结果为:True
(2)判断是否为英文字母Like "[A-Za-z]"
Debug.Print "B" Like "[A-Za-z]"
返回结果为:True
(3)判断字符长度
Debug.Print Len(Range("a1"))
返回结果为:1
(4)判断字符串中是否包含汉字Like "*[一-龥]*"
Debug.Print Range("a1") Like "*[一-龥]*"
“一”是汉字中最简单的字,而“龥”汉字中比较靠后的汉字。
返回结果为:False
4 判断结果是否为错误值
例:在A1单元格输入"=1/0",对A1单元格进行判断是否为错误值。
(1)IsError函数
Debug.Print VBA.IsError(Range("a1"))
返回结果为:True
(2)TypeName函数
Debug.Print TypeName(Range("a1").Value)
返回结果为:Error
5 判断是否为数组
例:在A1:A2单元格输入1和2,对A1:A2单元格进行判断是否为数组。
IsArray函数
Debug.Print VBA.IsArray(arr)
返回结果为:True
6 判断是否为日期
例:在A1单元格输入"2020/05/10",对A1单元格进行判断是否为日期。
IsDate函数
Debug.Print VBA.IsDate(Range("a1"))
返回结果为:True
三、数据类型转换
1 类型转换函数
类型转换函数是把表达式转换成相对应的数字类型,有CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar。
比如clng转换成长整型,cstr转换成文本型。
2 Format函数
format函数用法等同于工作表中的text函数,可以格式化显示数字或文本。
Format(值,格式(可选参数))
格式的写法类似设置单元格格式中的自定义类型。
示例:
Sub ss3()
Dim n, n1
n = 234.3372
n1 = 41105