网站首页 > 基础教程 正文
大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第62讲内容:利用字典和数组函数,同样实现提取只出现一次数据.
在VBA解决方案中,字典和数组利用非常广泛,利用方法也非常之多,多看看可以打开自己的思路,从中寻找适合于自己的方案,根据自己的爱好可以多加利用,每一种方法,只用切实的利用了,弄透了才能变成自己的知识结构。
今日内容同样是讲解提取只出现一次的数据,目的和上一讲一样,但我们的方法会有所区别。数据如下截图,我们要从A列给出的数据中提取只出现一次的数据。
思路分析和过程建立:今日我将利用字典和数组函数的方法实现,将数据装入数组,先将数据装入字典,同时区分一下哪个是只出现一次的数据,利用数组函数FLITER把有标识的数据区分出来,这种方法不用破坏字典数据的完整性,在后续还需要字典数据的情况下完全可以利用。下面看我给出的代码:
Sub mynzsz_62() '第62讲 利用字典和数组函数,同样实现提取只出现一次数据
Sheets("62").Select
'将数据放到数组中
myarr = Range("a1", Range("a65536").End(xlUp))
'创建字典对象
Set mydic = CreateObject("Scripting.Dictionary")
'将字典赋值,同时区分是否重复
For i = 1 To UBound(myarr)
If mydic.exists(myarr(i, 1)) Then
mydic(myarr(i, 1)) = "@"
Else
mydic.Add myarr(i, 1), myarr(i, 1)
End If
Next
'清空待回填区域
[e:e].Clear
[E1] = "不重复数据"
'取得回填数据,并回填
mys = Application.Transpose(Filter(mydic.items, "@", False))
Range("e2").Resize(UBound(mys), 1) = mys
Set mydic = Nothing
End Sub
代码截图:
代码解析:
1 上述过程实现了从A列数据中提取出只出现一次的数据。将数据装入数组myarr,将数组数据装入字典mydic,同时为了区分哪个是只出现一次的数据,用了"@"作为重复数据的标识,在从字典中提出数据时,利用数组函数FILTER把没有标识的数据提取出来放在MYS中,最后回填数据。
2 '将字典赋值,同时区分是否重复
For i = 1 To UBound(myarr)
If mydic.exists(myarr(i, 1)) Then
mydic(myarr(i, 1)) = "@"
Else
mydic.Add myarr(i, 1), myarr(i, 1)
End If
Next
上述预计中实现了字典数据的建立,当不是重复数据时字典的键值是键,当是多次出现的数据时字典的键值是"@".
3 '取得回填数据,并回填
mys = Application.Transpose(Filter(mydic.items, "@", False))
Range("e2").Resize(UBound(mys), 1) = mys
上述语句中实现了从字典的键值中提取不含有"@"的数据,放到数组MYS中,最后回填数据。
4 Set mydic = Nothing
上述预计中实现了字典的内存清空处理。以免占用过多的内存。
下面看数据的运行:
今日内容回向:
1 本讲的思路和上一讲有什么不同?
2 如何提取只出现2次的数据呢?
猜你喜欢
- 2024-10-18 一对多查询,Vlookup,Filter,Textjoin公式,你喜欢哪种
- 2024-10-18 Excel函数:office 365新增筛选函数FILTER的打开方式
- 2024-10-18 Excel VBA:掌握数组使用技巧,高效处理数据
- 2024-10-18 Excel中CHOOSECOLS+FILTER函数组合有妙用,新手必备!
- 2024-10-18 鸟枪换大炮,Excel查找的另一个函数——Filter函数
- 2024-10-18 Excel数组公式与自动溢出 excel数组公式与自动溢出的区别
- 2024-10-18 学习VBA,报表做到飞 第二章 数组 2.6 清空数组与嵌套数组转换
- 2024-10-18 spring boot 如何统一处理 Filter、Servlet 中的异常信息
- 2024-10-18 前端开发中操作数组最常用的16个方法
- 2024-10-18 FILTER函数一对多筛选 filter过滤多个条件
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)