大家好,今日我们继续讲解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次的数据呢?