扩展单精度格式是什么_零基础学VBA编程05:什么是数据类型?

3d8a34a03a6ee2ec6ff469d69198594e.png 每天一篇Excel技术图文 微信公众号:Excel星球 NO.79-什么是数据类型? 作者:看见星光  微博:EXCELers / 知识星球:Excel

嗨,大家好,我是星光,今天咱们来继续学习VBA编程。

在零基础学Excel的入门教程里咱们讲过,Excel是一款用来管理和分析数据的软件。VBA作为Excel的高级功能之一,主要作用当然也是数据管理和分析。既然是数据管理,自然需要着重了解数据的类型。这就好比优秀的厨师总需要格外了解食材的分类和品性,才能做出美味佳肴。那么什么是数据类型?VBA里又都有哪些数据类型呢?

什么是数据类型


数据类型,顾名思义,指的是具有共同特征的数据所形成的种类。在普通的Excel表格中我们将数据分为了5大类(参考【零基础学Excel】什么是数据类型?),分别是数值、日期、文本值、逻辑值和错误值。VBA编程中的数据类型划分与之相比,框架是相似的,只是种类更加细化,细化的目的是为了更合理的使用内存空间。
VBA的数据类型被划分为字节型、整数型、长整数型、单精度浮点型、双精度浮点型、货币型、小数型、字符串型、对象型、变体型、日期型、自定义型等等…… 是不是看得头大?哄你哩,吃空饷不干事的家伙很多,继续向下看,结局很简单。
……也许你还记得,也许你已不记得,在计算机课上咱们曾经学过,凡是进入电脑的信息,不论是图片、文本、数字或者其它形式,都是由0和1组成的。每一个0和1被称为 位(bit)——阁下可曾听闻大明湖畔32位和64位系统?——每8个位组成一个单元,也就是字节(Byte)。字节是计算机处理信息的最小单位。
在VBA中,数据是在内存中保存和运行的,不同的数据类型所使用的字节数不一样,占据的内存空间大小也就不一样。比如同样是数值类型,有的只用1个字节,有的却用4个字节,还有的甚至用14个字节等等——所以,显而易见,优化数据的划分类型,可以合理使用内存空间,提高代码的运算效率。
咳~了解了VBA数据类型细化的原始意义,下面进入 剧情反转时刻 。
……和谐社会你我共建,扫黑除恶你我有责,时代在飞速进步,科技在快速发展,计算机的水平日新月异,内存空间在扩张,内存机制在优化——因此对于当今的计算机而言,VBA细化的数据类型其意义已经十分有限,以至于我们基本可以置若罔闻。
这就好比你曾经蜗居一房没有厅,自然十分珍惜每一寸空间的使用问题;但现在你发达了,乔迁别墅了,有院有庭有厅有楼了,还需要斤斤计较每一寸空间怎么用吗?——当然啦,计较也是可以的,只是那般活着岂不是很不巴适?嘿!送你一段广告放松一下吧。
打个响指,如果去除掉烦琐的历史遗留渐趋无用的细枝分类,VBA编程中真正常用的数据类型都有哪些呢? 常用的数据类型
VBA常用的数据类型基本可以分为六类。数值、日期、文本值、布尔值、对象和变体。这就和教程【零基础学Excel】什么是数据类型讲的十分相似了。我还是很建议你们重读一下那篇教程,一方面,它把工作表中每个数据类型的特点写的比较全,另一方面,和这篇教程两下对比阅读,可以了解更多工作表数据和VBA数据的差异。 整数Long
数值即数字,数字可以分为整数和小数。在VBA编程中整数又被分为了字节型(Byte)、整数型(Integer)、长整数型(Long)。其中字节型是0~255之间的整数(1个字节);整数型是-32768~32767之间的整数(2个字节)。这俩货的范围都偏小,扩展性差,数据化时代已然很不好用。咱们可以直接忘记它们的存在,只要记得长整数型Long(4个字节)就好。
事实上,尽管长整型Long占用了4个字节,但在当前计算机环境下,它的转换效率更优,以至于其最终运算效率也是优胜Integer的。不过长整型也有范围,是-2147483648~2147483647之间的整数,这个范围大部分情况下够用了,但特殊情况下也会不够用,不够用怎么办?请往下看。 浮点数Double
浮点数即小数,在VBA中又被划分为了单精度浮点型、双精度浮点型、货币型、小数型;数据范围各有不同,能够保留的小数点位数也不一样——但我们只需要记得双精度浮点型(Double)就行了( 这也是VBA读取单元格内数值时默认使用的数据类型 ),其它的都当是空气。
双精度浮点型能保留小数点后14位小数,数据范围是:
在表示负数时:-1.79769313486231E308 ~ -4.94065645841247E-324在表示正数时:4.94065645841247E-324 ~ 1.79769313486231E308

需要说明的是,这里的浮点数并非只能是小数,也包含了其范围内的整数,所以,咱们上面说的那个问题,如果Long不够用怎么办?——请用Double。 字符串String
字符串(string)即文本值,是 有序的字符 组合。字符是计算机可以显示的任意符号,包括字母、标点和数字等。字符串可以很短,比如只有一个字符,也可以很长,比如一段话。字符串也可以由纯数字构成,比如电话号码、身份证号码等等,这种字符串咱们也习惯的称为文本型数值。
我们上面有句话字符串是有序的字符组合。这句话怎么理解呢?我举个例子。有一个字符串你爱我,它有三个字符 你 、 爱 、 我 按顺序构成;我们就不能把这个顺序打乱,比如打乱成我爱你。这是不行的,因为我是有妇之夫。这就是字符串的有序性。 日期Date
VBA的日期和Excel工作表的日期略有不同。相同之处是都以一种特殊的被称为 序列值 的数值形式储存;不同之处是工作表的日期范围1900年1月1日至9999年12月31日;而VBA的日期范围是 100年1月1日 至9999年12月31日。
工作表日期的序列值基准日是1900年1月1日,VBA的序列值的基准日是1899年12月31日。也就是说VBA把1899年12月31日的序列值记为1;此后的日期以此递增,比如1900年1月15日的序列值是16;此前的日期以此递减,比如1899年12月20日的序列值是 -10 。
由于日期是以数值的形式储存的,所以它可以直接参与加减乘除的数值运算,如果我们要计算两个日期之间相差的天数,直接相减就可以了。比如计算2019年有多少天:
Sub 日期差()    MsgBox #12/31/2019# - #12/31/2018#End Sub

说完了日期,再说下时间。对于日期来说,1天的数值单位是1,1天有24小时,那么1小时就可以表述为1/24。同理,1分钟可以表述为1/24/60。也就是说,一天中的每一个时刻都可以由小数形式的序列值来表示。比如,中午12点也就是0.5(1天的一半:1/2)。
同日期一样,时间也可以直接参与加减乘除的数值运算。
例如一个人凌晨6点28分开始加班,早晨9点56分下班,他加班的时长是多少呢?
Sub 时间差()    MsgBox Format(#9:56:00 AM# - #6:28:00 AM#, "hh:mm")End Sub
0162051b1b59393fcc0d24ea259634bb.png
此外,想必你已经注意到了,在VBA中日期和时间是用#包起来的。
布尔值
布尔值即逻辑值,只有True(真)和False(假)两种。逻辑值也能参与数学运算;其中 True为-1 (注意是负一),False为0。运行以下代码可见结果。
Sub 逻辑值数学运算()    MsgBox True + 0    MsgBox False + 0End Sub
对象Object
什么是对象,咱们上节课讲过了,这里没啥补充的。 变体Variant
变体Variant是Excel默认的数据类型,一个全能的数据类型,一个可以根据数据的大小自动 设置 自身数据类型的智能存在。当我们在代码中输入一个数据,而没有指定数据的类型时,系统就默认它为变体型,然后自动设置该数据的实际类型。
比如,我们输入数据"看见星光",系统会自动调整为字符串类型;输入数值1,系统会自动调整为整型,输入#2019-12-1#,系统会自动调整为日期类型,并修改为标准的日期格式。
——但是,系统对变体型数据的这种自我调正并不能保证绝对正确。
举一个典型的小例子,运行以下代码系统会提示溢出。
Sub 变体不够聪明()    MsgBox 30000 + 30000End Sub
284bd549817f394a63641ca6f01745d2.png
有朋友会想,不是吧?VBA连30000+30000都不会算?这么弱鸡,不学也罢……
……呃……这位道友请留步! afb9b71df49195914056de25a8f8fbb5.png
误会,都是误会,并不是VBA算不了加减乘除,VBA算30000+300000000都没问题,只是30000+30000有些特别……
怎么个特别法?这个说起来有点儿尴尬。VBA先读了第1个30000,将该值保存为整数型(整数型Integer的范围是-32768~32767之间的整数,一个历史遗留的早该被淘汰的数据类型),然后再加上另一个30000,也是整数型, 两个整数型相加 ……VBA天真的认为一家人不说两家话,同类型数据相加就没必要修改结果值的数据类型了,但事实上60000明显就超出了整数型的范围,于是最后系统只好提示溢出,意思就是数太大,我放不下,溢出了……这真是尴尬溢出屏幕……
这个例子同时告诫我们,在编程中尽量不要直接输入无谓的常数,而是使用变量或常量。什么是变量?什么是常量? 变体Variant 的优点和劣处还有哪些?我们下节课再撩,不贱不散。 ▎系统学习Excel
推荐加入我的Excel社群 ▎ 3f3dd8e65e94a21223838d78851dcb64.png 扩展阅读 a8a4ef9b50c6be6d23f17d937297050d.png ad9110346f1f1f334c6a695882c2e143.png f30dcfb1a0331bf978f9f16227e27b10.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值