VBA编程知识点(5)——数据类型判断与转换及四舍五入
学习自杨洋老师《全民一起VBA》
1. isdate函数
判断一个数据是否为日期类型,是,返回true;不是,返回false。
2.innumeric函数
判断一个数据是否为数值类型(integer、long、single、double、currency等),是,返回true;不是,返回false。
与公式isnumber的对比,执行结果和写法都比较相似,但innumeric的结果更精确。如给一个日期变量1/2/2019,公式isnumber返回的结果为true,因为日期本质上也是数值;而innumeric返回的结果为false。
3.并不是每一个数据类型都有对应的数据类型判断函数
Istring、isboolean等是没有的。
4.typename函数
返回数据的类型名称。如typename(5),返回字符串“Integer”。注意返回的数据类型的字符串中首字母是大写的。
判断单元格内的数据类型时,.value不可省略。
works.Cells(i, 2) = TypeName(Cells(i, 1).Value),正确返回单元格内的数据类型;
works.Cells(i, 2) = TypeName(Cells(i, 1)),全部返回为“Range”,因为cell为range对象。
5.数据类型转换
CBool转换为逻辑类型数据;CDate转换为日期类型数据;CStr转换为字符串类型数据;CInt转换为整数类型数据;CLng转换为long类型数据;CDbl转换为double类型数据;CCur转换为currency类型数据;CSng转换为single类型数据;CByte转换为byte类型数据;CDec转换为decimal类型数据。
VBA内置的自动类型转换的功能与上述转换函数的功能是一样的。使用类型转换函数的好处是可以让代码清晰易懂,此外某些情境下,自动类型转换失败时,只能使用转换函数。
转换成功的关键是:含义相同,大小相容。
含义相同,例:一个日期型的字符串“2019-6-2”,一个数字“23”,本质上大家都是数值,因此可以转换为日期数据类型。而字符串“明天”,就无法转换成日期。
大小相容,例:一个integer转换为double是可以的,但一个double转换为integer就可以因为数值过大而无法转换。
6.含小数的转为整数(银行家舍入法与四舍五入法)
含小数的数值转换为整数时,vba中使用的银行家舍入法,而不是四舍五入。对于尾数为5的情况,舍入到最近的偶数,而不总是进位。如CInt(3.5)与CInt(4.5)的结果都是4。
VBA系统函数Round(x,n),仍然是银行家舍入法。但excel中的表格公式Round(x,n)是四舍五入的,在代码中可以这样写application.worksheetfunction.round(x,n)。
在word、powerpoint等程序中没有公式时,可以使用Int函数实现四舍五入,Int(x+0.5),但只能保留整数分部了,负数时要注意是+0.5,还是-0.5。