VBA学习笔记42:数据类型与转换

VBA学习笔记42:数据类型与转换

3 年前 · 来自专栏 VBA学习笔记(完结)

学习资源:《Excel VBA从入门到进阶》第42集 by兰色幻想


一. 数据类型综述

在VBA中的数据类型有整数、文本、对象等类型。这些不同的类型有着特定的作用,在进行运算时也会占用不同大小的内存,所以我们在编写程序时为了提高运行效率,一般都要定义数据的类型。

之前也说过,因为不同数据类型的长度不一样,长度越长,占用的内存越长,所以选好合适的数据类型。


二、数据类型检查

  1. 检查是否为空

例:在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