与其它的编程语言一样,VBA也有它自己的数据类型。讲到数据类型,就离不开“变量”与“常量”这两个概念,变量与常量,都是用于保存数据的。顾名思义,“变量”是会变的,即它的值是可以改变的;而常量,则它的值通常是固定不变的。

定义数据类型的优点有2个:

  • 便于内存管理
  • 便于程序进行计算(数值型)和其它使用(非数值型)

    VBA中的基本数据类型有多种,但常用到的只有其中一半左右。

0. 变量与常量的定义

VBA中用

Dim 变量名 As 数据类型

的格式来定义基本变量。变量名可以是英文字母、数字、下划线的组合,但必须以字母开头。

变量的赋值则直接使用一个等号进行:

Dim i as Integer
i = 3

定义常量

格式如下:

Const 常量名 As 数据类型 = 常量值

如下定义一个整型常量:

Const h As Integer = 18

1. 字符串 String

字符串是用于保存文本数据的,字符串内容应放置于双引号内。

2. 数字类型

VBA中用于表示数字的数据类型有4种:整型 Integer、长整型 Long、单精度浮点型 Single、双精度浮点型 Double。整型及长整型用于表示整数,单精度与双精度浮点型都用于表示小数。

整型与长整型的区别在于两者所能表示的数值范围不同:

  • 整型数据能表示的数据范围:-32768 ~ 32767
  • 长整型数据能表示的数据范围:-2147483648 ~ 2147483647

而单精度浮点数与双精度浮点数除了在数值范围不同之外,两者所能表示的数据精度(即小数点后多少位)也是不同的

  • 单精度浮点型能表示的数据范围

在表示负数时: -3.402823E38 ~ -1.401298E-45

在表示正数时: 1.401298E-45 ~ 3.402823E38

  • 双精度浮点型能表示的数据范围

在表示负数时: -1.79769313486231E308 ~ -4.94065645841247E-324

在表示正数时: 4.94065645841247E-324 ~ 1.79769313486231E308

反正一句话,它们可以表示非常大的数据,但要注意的时,单精度浮点型其精度是6,即只能保存小数点后最多6位的数据;双精度浮点型其精度是14,即只能保存小数点后最多14位的数据。如果超出以上长度,则超出部分会被去掉,并且会自动四舍五入。

如上图,可以看到,作为单精度浮点数的i1在输出时变成了5.123457。

其实如果试图在给变量赋值时直接写到小数点后15位,VBE是会自动检测到并且直接进行四舍五入只保留14位的。上图i2我本想赋值为5.123456789123456,但写完最后的6之后,它自动消失了并且前面的5变成了6。

因为在数字的表示范围上长整型大于整型,而双精度浮点型大于单精度浮点型,理论上来说,如果把变量定义为表示范围更大的数据类型可以更好地避免掉数据溢出的问题。但在定义变量时,应当遵守的一个原则就是:够用就好。而不是越大越好。所以通常如果整型和单精度浮点型就足以表示数据的话,应当使用它们而不是长整型和双精度浮点型。

3. 日期型 Date

日期型数据不仅可以表示日期,还可以表示时间。可以表示的日期范围是:100年1月1日 ~ 9999年12月31日;可以表示的时间范围是:0:00:00 ~ 23.59.59。

能被Excel识别到的日期,都可以赋值给日期型变量。因为Excel中有很多很多种日期格式,因此在这里无法一一举例。需要用到的时候,可以多尝试。

4. 布尔型 Boolean

布尔型数据用于表示逻辑值:真、假 。其中“真”为True,“假”为False。布尔值数据常用于条件判断语句。

应当注意的是,当其它数据类型转换为布尔值时,0会转成False,其它值则变成True。当把布尔值转换成其他数据类型时,False会转换为0,True则是-1。

5. 变体型 Variant

变体型数据是一种特殊的数据类型,几乎可以用于保存所有其它数据类型的数据。可以简单地理解为:当不知道变量所要表示的数据是什么类型时,就把它定义为Variant(但这种操作应当尽量避免)。

6. 对象型 Object

对象型是VBA中另一种特殊的数据类型。有点类似于其它高级编程语言中的“对象”,因为它们都有自己的属性与方法,但也仅限于在这两个方面上类似。

对象型数据会在下一章单独讲解

7. 枚举型

枚举型数据就我目前而言使用得并不多,几乎没有使用过。但它可以在某些特定场合下比较有用,因此在这里也提一下。

当一个变量只有几种可能的值时,可以定义为枚举类型。枚举就是将变量的值逐一列出,属于该枚举型的变量只能取列举的某一个值。

枚举型数据定义格式如下:

Public | Private Enum 变量名
成员1 [= 常数表达式1]
成员2 [= 常数表达式2]
……
End Enum

开头的“Public | Private”表示两者取其一的意思,Public和Private用于定义变量的作用域(即变量的有效范围,具体后面再讲)。用中括号[]括起来的部分是可以省略的,如果省略的话,则默认以0表示第一个成员,1表示第2个成员,以此类推。

最典型的就是用一个枚举型变量来表示星期:

Public Enum WorkDays
星期日
星期一
星期二
星期三
星期四
星期五
星期六
End Enum

它的使用如下:


本系列教程其它文章

Excel VBA 入门(零)

Excel VBA 入门(一)数据类型

Excel VBA 入门(二)数组和字典

Excel VBA 入门(三) 流程控制1-条件选择

Excel VBA 入门(四)流程控制2-循环控制

Excel VBA 入门(五)Excel对象操作

Excel VBA 入门(六)过程和函数

Excel VBA 入门(七)注释、宏按钮及错误处理

Excel VBA 入门(八)单元格边框

Excel VBA 入门(九)操作工作薄

Excel VBA 入门(十)用户窗体开发

Excel VBA入门(一)数据类型的更多相关文章

  1. Excel VBA入门(九)操作工作薄

    虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...

  2. Excel VBA入门(八)单元格边框

    本文基于以下文件 http://pan.baidu.com/s/1nvJtsu9 (部分)内容预览: 1. 边框样式 Sub cell_format() Dim sht As Worksheet Di ...

  3. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

  4. Excel VBA入门(六)过程和函数

    前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数.其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是: 函数有返回值,过程没有 函数可以在Ex ...

  5. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

  6. Excel VBA入门(四)流程控制2-循环控制

    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...

  7. Excel VBA入门(三) 流程控制1-条件选择

    VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块):另一种是循环,即循环地执行语句(块).本节介绍第一种. 1. IF if 语句其实包含有几种形式: ① ...

  8. Excel VBA入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...

  9. Excel VBA 入门(零)

    本教程所用系统环境: Windows 10 Excel 2013 1. 添加开发工具 打开Excel,依然找到"文件"->"选项"->"自 ...

随机推荐

  1. piwik docker 安装

    备注: 生产环境使用docker-compose  1. 安装docker && docker-compose    此处略过 2. 下载docker-compose  的文件   h ...

  2. Oracle冷备份和热备份的实践(原创)

    参考本博转发的备份博文和上传的文件,进行了冷热备份实践并进行了记载以备以后查阅,本次实践的环境是win10,安装了oracle11g 一.冷备份 1.cmd->sqlplus /nolog 2. ...

  3. 从内存的角度观察 堆、栈、全局区(静态区)(static)、文字常量区、程序代码区

    之前写了一篇堆栈的,这里再补充下内存其他的区域 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一般由程 ...

  4. Oracle数据库clob字段导出为sql insert插入语句

    oracle数据库的clob字段导出为sql insert插入语句可以分三种情况:1,clob没有换行符:2,clob有换行符但不以分号结尾:3,clob有换行符并且以分号结尾. clob没有换行符使 ...

  5. Django 的路由分配系统

    Django的路由系统 URL配置(URL.conf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的 ...

  6. 【转】JMeter测试有无数据库连接池的性能

    使用JMeter测试一下有无数据库连接池的性能: 1.下载JMeter 2.无连接池的servlet Java代码 public void doGet(HttpServletRequest reque ...

  7. 20165226 2017-2018-4 《Java程序设计》第9周学习总结

    20165226 2017-2018-4 <Java程序设计>第9周学习总结 教材学习内容总结 第十二章 URL类 构造方法1 try { URL url = new URL(" ...

  8. [转载,感觉写的非常详细]DUBBO配置方式详解

    [转载,感觉写的非常详细]DUBBO配置方式详解 原文链接:http://www.cnblogs.com/chanshuyi/p/5144288.html DUBBO 是一个分布式服务框架,致力于提供 ...

  9. 关于git rebase的相关讲解

    http://gitbook.liuhui998.com/4_2.html 一.基本 git rebase用于把一个分支的修改合并到当前分支. 假设你现在基于远程分支"origin" ...

  10. MapReduce启动的Map/Reduce子任务简要分析

      对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程.   ...