相关文章推荐
有腹肌的上铺  ·  jquery实现改变显示的文字的背景色和字体 ...·  2 年前    · 
刚分手的人字拖  ·  Windows-based ...·  2 年前    · 
风流的墨镜  ·  Tornado学习笔记(二) ...·  3 年前    · 
欢快的拐杖  ·  如何在Snowflake中把哈希字符串转换为整数?·  3 年前    · 
完美的地瓜  ·  iframe用法 ...·  3 年前    · 
Code  ›  Excel VBA解读(162): 一起看看数组、集合和字典开发者社区
云存储 对象数组 vba数组 vba字典
https://cloud.tencent.com/developer/article/1558345
朝气蓬勃的仙人掌
2 年前
作者头像
fanjy
0 篇文章

Excel VBA解读(162): 一起看看数组、集合和字典

前往专栏
腾讯云
备案 控制台
开发者社区
学习
实践
活动
专区
工具
TVP
文章/答案/技术大牛
写文章
社区首页 > 专栏 > 完美Excel > 正文

Excel VBA解读(162): 一起看看数组、集合和字典

发布 于 2019-12-23 18:33:04
2.3K 0
举报

前面的一系列文章,我们详细讲解了集合、数组和字典这三种常用的数据结构。在本文中,我们简单小结一下,看看它们之间有哪些区别,以巩固所学的知识。

存储的类型

数组

数组是一组具有相同名称的同类元素。可用来存储多个相同类型的变量。

集合

集合可以用来存储不同的数据类型。

字典

字典可以用来存储不同的数据类型。

注意,在数组中,可以存储用户定义类型。然而,不能在字典或集合中存储用户定义类型。

变量声明

数组

在声明数组变量时,可以指定数组的大小,如:

Dim MyArray(5) As Integer

也可以先不指定数组的大小:

Dim MyArray() As Integer

在使用之前,须指定其大小:

ReDim MyArray(5)

集合

可以先声明集合变量:

Dim col As Collection

在需要使用该集合前创建集合对象:

Set col = New Collection

也可以在声明的同时创建集合对象:

Dim col As New Collection

字典

创建字典对象,先要设置对库文件Microsoft Scripting Runtime的引用。可以编写声明字典对象变量的代码如下:

Dim dict As New Dictionary

或者:

Dim dict As Dictionary

Set dict = New Dictionary

对元素赋值

1.不能对集合中已有元素重新赋值。

2.可以修改字典元素的值。在给指定键的字典元素赋值时,如果指定键的字典元素已存在,则会修改该元素的值。如果指定键的字典元素不存在,则会添加新字典元素。

3.集合、字典都是对象,在返回整个对象时,应使用Set语句。

对元素的访问

数组、集合、字典的存储结构不同,决定了访问其元素的差异。

数组

每个元素放置在固定的位置,我们需要知道其索引,来访问它。例如:

Dim MyArray(5) As Integer

Dim i As Integer

For i = 0 To 5

MyArray(i) = i

Nexti

'访问第2个元素

Debug.Print MyArray(1)

数组的索引值默认从0开始。

集合

下面的代码先声明集合对象,然后在添加元素项时定义键值:

Dim col As Collection

Dim rng As Excel.Range

Dim sRangeName As String

Set col = New Collection

sRangeName= "RangeName"

Set rng = Range(sRangeName)

col.Add rng, sRangeName

此时,想从该集合中获取特定元素项时,可以指定其位置(索引值),或者使用键值。如果你知道其是第一个添加到集合中的且位置没有变化,可以使用索引值:

col.Item(1)

集合的索引值基于1。也可以使用键值:

col.Item(sRangeName)

集合的索引值从1开始。

字典

字典中有唯一标识元素的键,我们只需要使用这个键来访问元素,而不需知道其具体的存放位置。

下面的代码添加对象到字典中,其语法与添加元素项到集合中非常相似,只是键和元素参数的位置相反:

Dim dict As Scripting.Dictionary

Dim rng As Excel.Range

Dim sRangeName As String

Set dict = New Scripting.Dictionary

sRangeName= "RangeName"

Set rng = Range(sRangeName)

dict.Add sRangeName, rng

可以使用下面的语句来获取指定键所在的元素项:

dict.Item(sRangeName)

添加元素

添加元素时,集合与字典的参数位置刚好相反,例如:

‘在集合中添加元素

col.Add Item:=6, Key:=”东区”

‘在字典中添加元素

dict.Add Key:=”东区”,Item:=6

然而,对于集合,没有内置的方法来检查是否已存在指定的键,但是可以使用Exists方法检查字典中是否存在指字键。

什么时候使用

在编程时,通常要求我们能创建一个对象,能够存放一组相关的值,并且能够通过该对象便捷地处理存储的值,数组、集合、字典都能实现这个目的。

数组

当有许多同类型的数据需要逐一处理时,可以使用数组。然而,数组的大小在使用之前通常是固定的,因此在知道数据数量的前提下使用数组。

集合

集合可任意添加或删除元素,因此对于数量变化的数据使用集合更好。相对于数组,集合更容易使用一些,特别是添加元素、遍历元素。然而,集合是只读的,你可以添加或删除集合中的元素,但不能修改其值。

字典

有一系列数据,但是需要获取不重复元素值时,可以使用字典。

字典与集合

集合是一种很好的数据结构,在Excel对象模型中几乎所有的 容器 结构都是使用集合,例如:Workbooks、Worksheets等。

然而,字典有更多的内置方法,使得其使用比集合更方便。特别是下列3个方法:

1.Exists方法:用来判断字典中是否存在指定的键。(如果要在集合中检查指定的键是否存在,则需要额外编写一段代码来完成)

2.Keys方法:返回一个数组,包含字典中所有的键。(同样,集合中实现相同的目的需要编写遍历和填充的代码)

3.RemoveAll方法:清除字典中所有的元素。

此外,正如前面提到的,字典允许我们修改键和值。并且,由于Dictionary对象使用了散列表和一些先进的排序和索引算法,因此字典的运行速度也快于集合的速度。

数组与集合

与使用数组相比,使用集合对象更便于访问和维护:

1.集合成员可以添加在一个已经存在成员的前面或后面,这取决于该已有成员的键值或索引值。

2.集合成员可以通过它们的键值或索引值访问。

3.集合成员可以通过它们的键值或索引值删除。但是,利用一个索引值删除多个成员时,应该从后面开始删除,即从索引值较高的成员到索引值较低的成员,因为每次删除成员后集合就要重新建立索引。

数组与字典、集合

正如前面提到的,在数组中,可以存储用户定义类型。然而,不能在字典或集合中存储用户定义类型。

点击展开阅读全文
文章分享自微信公众号:
完美Excel
完美Excel

扫码关注公众号

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

原始发表:2019-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

编程算法
登录 后参与评论
关于作者
0
文章
0
累计阅读量
0
获赞
前往专栏
关注 - 腾讯云 开发者 公众号
将获得
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
扫码关注腾讯云开发者
NEW
切换旧版
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档
 
推荐文章
有腹肌的上铺  ·  jquery实现改变显示的文字的背景色和字体大小_新技术的技术博客_51CTO博客
2 年前
刚分手的人字拖  ·  Windows-based computer freeze troubleshooting - Windows Client | Microsoft Learn
2 年前
风流的墨镜  ·  Tornado学习笔记(二) 路由/post/get传参 - ChnMig - 博客园
3 年前
欢快的拐杖  ·  如何在Snowflake中把哈希字符串转换为整数?
3 年前
完美的地瓜  ·  iframe用法 二个iframe怎么都显示(图片)有在同一个位置 请高手指点一下_百度知道
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号