数据去重-----VBA字典法

在Excel里面数据去重方法比较多,目前用的比较多的有:

1. 数据--筛选---高级筛选

2. 数据透视表

但以上这两种方法都有局限性,比如需要去重的区域是多列数据


下面介绍一种通过VBA编写宏程序来进行数据去重,可以去重多列数据

先把代码呈现出来,再进行解释:


Sub 字典方法()

    Dim rng As Range       '定义一个区域,用于接收需要去重的单元格区域

    Set rng = Application.InputBox("请指定去重区域", "数据源区域", , , , , , 8)     '可以是一列,也可以是多列

    If rng Is Nothing Then End         '如果没有选择区域,则退出,注:是End,不是End IF



    Dim arr    '定义一个数组,用于存储去重区域的值

    arr = rng.value



    Dim a

    On Error Resume Next         '这里需要忽略错误,后面添加重复键值会引发错误



    Dim dic As Object    

    Set dic = CreateObject("scripting.dictionary")            '引用字典对象



    For Each a In arr

        If Len(a) > 0 Then     

            dic.Add CStr(a), ""     '往字典里面添加键值

        End If

    Next a

    Err.Clear



    Set rng = Application.InputBox("请指定结果存放区域,单个单元格即可", "存放区域", , , , , , 8)



    If Err <> 0 Then End



    rng(1).Resize(dic.Count, 1) = WorksheetFunction.Transpose(dic.Keys)         '往单元格里面写入去重后的数据



End Sub


这里主要运用的字典的键值唯一性,如果向字典里面添加已经存在的键,则会引发错误,所以中间部分需要忽略错误

数组+字典在VBA里面可以提升程序运行效率,如想提升VBA程序运行效率,可多运用数组、字典