array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Excel VBA入门(二)数组和字典 - 爱码网
wuzhiblog

数组和字典也是VBA的常用到数据类型之一。但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典。
事实上,字典不是VBA内置的类型,它是Windows脚本语言的。但其实字典在VBA中也是非常重要的,它非常适用于需要进行非重复性数据的操作。我多次需要使用到字典,但很少用到数组。

1. 数组

如果有学过其它编程语言,应该对数组不陌生。其实数组就是多个变量的集合,而且它是有顺序的,通过索引来访问一个数组中的各个值。
但应该记住的是:数组中的各个数据,它们的类型必须是相同的。

数组也应当要先声明,后使用。VBA中的数组有动态数组和静态数组之分。

1.1 静态数组

所谓静态数组,即它的长度是固定不可变的。
声明语法如下:

Dim 数组名(a to b) As 数据类型

其中a和b均为数字,表示数据的索引起始值。也可以只写一个数字,则此时数组使用默认索引,从1开始,数字表示它的长度。
例如:

Dim MyArray1(10) As String
Dim MyArray2(10 to 20) As String

1.2 动态数组

如果在定义时并不知道需要使用的数组的长度是多少,则可以定义它为动态数组:

Dim Myarr3() As String

可以看到,定义动态数组,只需要在括号里面留空就行了。
待确定了数组的长度之后,可以使用ReDim来重新定义数组

1.3 数组的赋值与取值

虽然都是通过索引来对数组进行赋值,但与其它主流的编程语言不同的是,VBA中不是使用中括号[]而是使用小括号()进行的。

Dim arr(5) As String

For i = 1 to 5
     \'赋值
     arr(i) = i
Next

\'取值
Debug.Print arr(1)

此外,也可以直接把Excel单元格中的数据赋值给数组。如上面定义的长度为5的一维数组,可以以以下方式把单元格中A1到A5的数据分别载入到数组arr中:

arr = Range("A1:A5")

1.4 多维数组

VBA中也支持多维数组。
如,定义一个四行五列的二维数组如下:

Dim Myarr(4, 5) as String

或者:

Dim Myarr(1 to 4, 5 to 8) As String

定义一个三维数组:

Dim Myarr(3, 4, 5) As String

或者:

Dim Myarr(1 to 3, 4 to 6, 7 to 9) As String

1.5 其它

网上有说到很多对数组的操作,例如求数组的上下界,对数组求和等,我觉得这些都不算是数组的特有操作,因为它对其它数据类型也是可以使用的,所以就不打算再介绍了。有需要用到的,可以再查询

2 字典

字典其实就是一些“键-值”对。在很多场合,它都能起到很大的作用,使用起来非常方便,有类似于微型数据库的作用,可用于临时保存一些数据信息。

2.1 创建字典

VBA中创建字典有两种方法

2.1.1. 引用声明

在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(C:\Windows\System32),然后找到scrrun.dll,确定确定返回就行了。
添加引用后,就可以像定义其它变量一样声明使用字典了。

Dim d As New Dictionary

2.1.2. 直接创建

我目前基本上都使用的这种方法。可如下定义:

Dim d As Object
Set d = CreateObject("Scripting.Dictionary")

2.2 字典的方法

字典有6个方法,分别是Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

2.2.1 Add

用于添加内容到字典中。

d.Add key, item

第一个参数为键,第二个参数为键对应的值

2.2.2 Exists

用于判断指定的关键词是否存在于字典(的键)中。

d.Exists(key)

如果存在,返回True,否则返回False。通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作。

2.2.3 Keys

获取字典所有的键,返回类型是数组。

d.Keys()

2.2.4 Items

获取字典所有的值,返回类型是数组。

d.Items()

2.2.5 Remove

从字典中移除一个条目,是通过键来指定的。

d.Remove(key)

如果指定的键不存在,会发生错误。

2.2.6 RemoveAll

清空字典。

2.3 字典的属性

字典有4个属性:Count、Key、Item、ConpareMode

2.3.1 Count

用于统计字典中键-值对的数量。也可以简单理解为统计字典中键的个数。

d.Count

2.3.2 Key

用于更改字典中已有的键。如:

d.Key("apple") = "Orange" 

如果指定的键不存在,则会产生错误。

2.3.3 Item

用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增。如:

\'读取
Debug.Print d.Item("apple")

\'写入
d.Item("apple") = 10

2.3.4 CompareMode

CompareMode用于设置或者读取字典对象中比较字符串时的比较模式。
这个到目前为止我还没有用过。所以不讨论了。


本系列教程其它文章

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 入门(十)用户窗体开发

分类:

技术点:

相关文章: