玖叶教程网

前端编程开发入门

VBA字典第62讲:利用字典和数组函数,实现提取只出现一次的数据

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言