VBA删除重复项(不使用字典)

2025-09-27 05:36:44

1、假设A列是我们要处理的数据,包含了重复的项目,我们要把这些重复的项目剔除掉,然后贴在C列上。

VBA删除重复项(不使用字典)

2、我们依旧按下熟悉的alt+f11进入vbe编辑器,新建一个模块输入代码:

Sub 提取唯一值()

Dim Rng As Range

Dim Str As String

Dim EndRowNo As Integer

EndRowNo = Range("A1").End(xlDown).Row  '找出A列最大行数

For Each Rng In Range("A2:A" & EndRowNo) '遍历A列每一个单元,如果没有和之前的值重复则合并到Str里去,并用“/”隔开

    If Not Str Like "*" & Rng & "*" Then '用Not like判断值是否已经合并过

        Str = Str & "/" & Rng

    End If

Next

Str = VBA.Mid(Str, 2, Len(Str)) '把生成的字符串中第一个“/”号去掉

Dim arr

arr = Split(Str, "/") '使用split函数生成数组,这个数组内的元素就是我们要找的唯一值了

Range("c2:c" & UBound(arr) + 2) = WorksheetFunction.Transpose(arr) '把生成的数组贴到目标区域

End Sub

VBA删除重复项(不使用字典)

3、我们回到刚才的表格,把vbe编辑器缩小,并按下运行键,我们就可以看到唯一值就提取到C列中去了。

VBA删除重复项(不使用字典)

VBA删除重复项(不使用字典)

4、最后方便大家理解解释一下代码:

Dim arr 声明不定数组的方式,不需要加上arr()

split函数可以将字串按某分割符号转化成数组,代码中“/”符号,可以替换成其他的符号

UBound(arr) + 2  UBound找出的是数组的最大下标,但数组的索引是从0开始的,所以实际元素的数量要加上1,然后C列是从第二行开始黏贴的,所以又要加上1,所以C列的行数就是数组的最大下标+2了。

WorksheetFunction.Transpose(arr)  单元格黏贴数组的时候,默认一维数组是“行”的形式,如range("a1:g1"),但我们的目标是C列,为列的形式,所以我们要用这个Transpose函数转化数组,否则会报错哦。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢