EXCEL——VBA字典实现查找多列的重复项

animal-3239706_640.jpg

顾得猫宁,各位亲爱的读者。今天我们来讲一讲VBA编程中一个重要的知识点——字典。为了更好的让大家理解字典是什么意思,我整理了网上一位大牛总结的字典相关知识,特此给大家转载过来,希望大家有所收获。

  • 字典相关知识解析(通俗易懂,更是精华)
  1. 定义字典
    Set d = CreateObject("Scripting.Dictionary")

  2. 呼之即来,挥之即去

d("张三“)=1 '相当于给字典赋值,张三过来(没有就生成)拿个1站一边去
d("李四”)=2 '相当于给字典赋值,李四过来(没有就生成)拿个2站一边去
d("李四”)=3 '相当于改变值,字典中已经有李四了,李四跑过来,丢下2换个3站一边去
注:这时字典中有两个人的存在,张三=1 和 李四=3,相当于实现了去重复的功能

s=d("张三") 's=1 即叫了声张三,张三就告诉你他拿的是1
s=d("李四") 's=3 即叫了声李四,李四就告诉你他拿的是3
s=d("麻子") 's="" 没有找到麻子怎么办呢,字典里就自动生成一个麻子d("麻子") =“”,告诉你他手上是空的
注:这时字典中有三个人的存在,张三=1 ; 李四=3;麻子=“”

  1. 将字典里的东西变成数组

arr= d.Keys '把名字的集合按先来后到的原则放到一维数组里 arr(0)=“张三” ; arr(1)=“李四” ; arr(2)=“麻子”
arr1=d.Items '把名字对应的值的集合按先来后到的原则放到一维数组里 arr1(0)=“1” ; arr1(1)=“3” ; arr1(2)=“”

  1. 查找字典中有没有这个人
    s=d.Exists(“张三”) 's=True 有的
    s=d.Exists(“彭希遴”) 's=False 没有

  2. 清空数组
    d.RemoveAll

注:上文出处为http://club.excelhome.net/thread-926188-1-1.html本文只做学习转载使用,如侵必删,有异议请联系作者

  • 下面我们找个具体的例子来运用一下
    比如下面两列数据,我们要通过VBA代码来实现将两列都重复的行高亮出来。这个时候应该怎么办呢?


    image.png

    我们通过字典就可以实现解决这个问题,下面我们看一下代码:

Sub 双列查找重复项()
    arr = [a1].CurrentRegion
    Set d = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False
    For j = 2 To UBound(arr)
        d(arr(j, 1) & arr(j, 2)) = 1 + d(arr(j, 1) & arr(j, 2))
    Next
    For j = 2 To UBound(arr)
        If (d(arr(j, 1) & arr(j, 2))) > 1 Then
            Cells(j, 1).Resize(1, 2).Interior.ColorIndex = 3
        End If
    Next
    Application.ScreenUpdating = True
End Sub

在上面的代码中,首先,我们创建了一个字典
Set d = CreateObject("scripting.dictionary")
然后Application.ScreenUpdating = False是为了让代码运行更快速。
下面这一行是对字典中进行赋值,当没有重复值的时候,赋值都为1,而当有重复值的时候,值就会大于1

For j = 2 To UBound(arr)
        d(arr(j, 1) & arr(j, 2)) = 1 + d(arr(j, 1) & arr(j, 2))
Next

最后,再次对字典的值进行遍历并条件判断,即可判断哪些是重复的值,其对应的行的单元格高亮即可

For j = 2 To UBound(arr)
        If (d(arr(j, 1) & arr(j, 2))) > 1 Then
            Cells(j, 1).Resize(1, 2).Interior.ColorIndex = 3
        End If
Next

最后得到的结果如下:


3月-20-2018 20-20-36.gif

希望能帮到大家~

~如果对本文有疑问,请联系作者哦
animal-3239706_640.jpg

~
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容