×

重复 removeduplicates 数组 字典 filter

vba删除重复值

鹭岛小千 鹭岛小千 发表于2021-11-14 11:13:06 浏览1172 评论0

抢沙发发表评论

【问题描述】VBA如何删除重复值?

57-1.png

【小千解答】可以使用以下3种方法:

方法1:Range.RemoveDuplicates方法

方法说明:

57-2.png

代码如下:

Sub xqoffice()
    Range("A:A").Copy Range("C1")
    Range("C:C").RemoveDuplicates 1, xlYes
End Sub

注意事项:

1、Excel2007及以上版本才支持RemoveDuplicates方法。

2、工作表处于筛选状态,有数据行被过滤隐藏的情况,会影响程序的运行结果。


方法2:借助字典

代码如下:

Sub xqoffice2()
    Dim Arr
    Dim i       As Integer
    Dim xqDic   As Object
    Set xqDic = CreateObject("scripting.dictionary")
    Arr = Range("A1").CurrentRegion.Value
    For i = 1 To UBound(Arr)
        xqDic(Arr(i, 1)) = ""
    Next i
    Range("C1:C" & xqDic.Count).Value = Application.WorksheetFunction.Transpose(xqDic.keys)
    Erase Arr
    Set xqDic = Nothing
End Sub


方法3:Filter函数和动态数组

Filter函数语法:

57-3.png

代码如下:

Sub xqoffice3()
    Dim Arr, Rst, ArTmp
    Dim i   As Integer
    Dim N   As Integer
    Arr = Range("A1").CurrentRegion.Value
    ReDim Rst(1 To 1)
    Rst(1) = Arr(1, 1)
    N = 1
    For i = 1 To UBound(Arr)
        ArTmp = Filter(Rst, Arr(i, 1))
        If UBound(ArTmp) < 0 Then
            N = N + 1
            ReDim Preserve Rst(1 To N)
            Rst(N) = Arr(i, 1)
        End If
    Next i
    Range("C1:C" & N).Value = Application.WorksheetFunction.Transpose(Rst)
    Erase Arr
    Erase Rst
End Sub


打赏码.png


群贤毕至

访客