VBA调用外部对象01:字典Dictionary(去除重复数据)
时间:2022-07-22
本文章向大家介绍VBA调用外部对象01:字典Dictionary(去除重复数据),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前面我们简单介绍了字典的方法、属性,以及使用字典来快速判断数据是否存在。
如果你的数据是有重复的,前面那个例子里的代码将会出错:
For i = 2 To rowA
d.Add arrA(i, 1), i
Next
字典的这种添加Key和Item的方式是不允许重复的:
这个错误将会中断我们的程序运行,那如何避免这种错误的出现呢?
既然字典有Exists方法可以判断是否存在,那在Add之前我们先进行一次判断就可以了:
If Not d.Exists(arrA(i, 1)) Then
d.Add arrA(i, 1), i
End If
但是这样需要3条语句,实在有点麻烦,你应该还记得前面我们讲到的那个缺省的Item属性,那我们换一个思路,属性如果不是只读的,我们是可以去更新它的:
d.Item(arrA(i, 1)) = i
这样一条语句的意思就是我要更新Key为arrA(i, 1)这个值的Item属性,而且字典在处理这个的时候,如果是不存在的Key,它是会自动调用Add方法增加的,这样我们就解决了因为重复Key而导致的错误提示了,又因为Item是缺省属性,所以是可以省略的,简化后的代码就是:
d(arrA(i, 1)) = i
这样就更方便了,如果你看了前面我提到的那个帖子“呼之即来,挥之即去”,应该已经知道了这种方法,VBA中使用字典基本是不会明确调用Add方法的,一般情况都是用这种直接更新Item的方式。
去除重复:
我们知道了字典的这个特点,不允许重复的Key,那我们就可以使用它来完成一个经常会碰到的去除重复数据的功能了,我们只需要把数据全部添加到字典中,最后取出Keys就可以了,非常的简单:
Sub TestDic2()
'声明
Dim d As Dictionary
'创建
Set d = New Dictionary
Dim arrA() As Variant
Dim rowA As Long
Dim i As Long
'获取A列的最后一行行号
rowA = Cells(Cells.Rows.Count, 1).End(xlUp).Row
'将A列的数据存放到数组中
arrA = Range("A1").Resize(rowA, 1).Value
'将A列数据记录到字典中
For i = 2 To rowA
d(arrA(i, 1)) = i
Next
'输出结果
Range("B1").Resize(d.Count, 1).Value = Application.WorksheetFunction.Transpose(d.keys)
'释放
Set d = Nothing
End Sub
- Linux进程关系
- 基于OBS的插件开发总结
- Linux从程序到进程
- asp.net 解码gb2312下urlencode后的字符串
- XCode日常使用备忘录
- .net中close和dispose及关闭流操作
- Linux文件管理相关命令
- 实现滑动分页(微博分页方式)
- 腾讯汇赢正式上线,变革2018大连房地产市场营销
- Windows下程序启动时出现0xc000007b错误的解决方案
- 外媒报道:CBM.com、NMA.com等域名齐交易
- ObjectDataSource与GridView配合使用经验总结系列一:数据绑定
- ObjectDataSource与GridView配合使用经验总结系列二:分页
- 网页优化系列二:使用Cache缓存静态文件、图片(asp.net版)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode | 1.两数之和
- springboot开发之配置嵌入式Servlet容器两种方式
- jvaa之初始化块
- java之匿名内部类
- springboot配置之获取配置文件中属性的第二种方法(@Value)不同于@ConfigurationProperties
- mybatis动态sql之内置参数_parameter和_databaseId
- Redis | Redis 字符串相关命令
- java之抽象类
- springboot配置之yaml
- properties和yaml配置文件
- java之模板方法设计模式
- java之接口
- PHP 代码混淆处理思路
- java之工厂方法设计模式
- springboot开发之使用外部servlet容器及对jsp的支持