首页 > 编程知识 正文

vba字典提取不重复值,vba字典根据key取item

时间:2023-05-06 08:44:57 阅读:15935 作者:2872

你好。 今天继续介绍VBA数组和词典解决方案。 今天就第52届“使用词典提取2列数据重复值”进行说明。 有人说:词典是VBA中最好的部分,这样看法的人一定有自己的道理。 确实,使用词典给我的代码带来很大的便利。 今天我说明的是利用词典,提取两列重复数据。 在实际工作中,并列提取重复数据是一项常见的工作,直接比较比对,真的很费事,很费时间。 我以前说过数据库的方法,我觉得是个好工作

例如,如何提取下面AB列的数据、a中与b列重复的数据?

先看看数据吧。 很多都是重复的。 首先进行排序处理。 用一般的方案很难应对。 接下来看看我展示的词典计划代码:

利用Sub mynzsz_52 () '第52次词典,提取2列的数据重复值

sheets(52 ).Select

setmydic=createobject (scripting.dictionary ) )。

myarr1=range([a2],[a65536].end ) xlup ) )

myarr2=range([B2],[B65536].end ) xlup ) )

forI=1toubound(myarr1) )。

'将键值分配给0

myDIC(myarr1(I,1 ) )=0

下一步

forj=1toubound(myarr2) )

'如果数组2中有与词典对应的键,请将键值更改为1

ifmyDIC.exists(myarr2(j,1 ) ) thenmydic (myarr2(j,1 ) )=1

下一步

'判断词典的各键,对应的键值为0,即数组2中不存在的情况下删除

For Each d In mydic.keys

ifmyDIC(d )=0 Then mydic.Remove (d ) (d ) )。

下一步

'将词典数据回填到工作表中

[e:e].ClearContents

range(E1 )='asjdpkq与列b重复的值'

range(E2 ).resize(myDIC.count,1 )=worksheet function.transpose (my DIC.keys ) ) )。

最终辅

代码截图:

代码分析:

1上述代码提取重复数据,实现并行重功能,代码简洁,操作灵活。

2.setmydic=createobject (scripting.dictionary ) )。

上述代码编写了词典

3.myarr1=range([a2],[a65536].end ) xlup ) )

myarr2=range([B2],[B65536].end ) xlup ) )

上述代码分别将两列数据放入数组中。

4forI=1toubound(myarr1) )。

'将键值分配给0

myDIC(myarr1(I,1 ) )=0

下一步

将数组1中的数据放入词典的键中时,键值将被分配给0

5forj=1toubound(myarr2) )

'如果数组2中有与词典对应的键,请将键值更改为1

ifmyDIC.exists(myarr2(j,1 ) ) thenmydic (myarr2(j,1 ) )=1

下一步

在数组2中创建循环,并将键值修改为1 (如果有与词典对应的键)

6 For Each d In mydic.keys

ifmyDIC(d )=0 Then mydic.Remove (d ) (d ) )。

下一步

处理词典中的数据,如果键值为0,则删除

7 '将词典数据回填到工作表中

[e:e].ClearContents

range(E1 )='asjdpkq与列b重复的值'

range(E2 ).resize(myDIC.count,1 )=worksheet function.transpose (my DIC.keys ) ) )。

所述代码数据回填。

看看代码的执行:

今天的内容返回:

1如何使用词典获取重复数据的值?

2为什么要用上面的代码重新赋值给键值?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。