源数据及要求:删除黄忠和庞统的各一行重复数据,两个孙权因为班级不同,保留
数据结果展示:
代码解析:
Sub DeleteSameRow1()
'删除所有重复行,保留唯一值
Dim LastRow As Long
Dim i, k, n As Long
Dim arr, brr()
Dim str As String
Application.ScreenUpdating = False
'关闭屏幕更新,以提高宏的运行效率
'建立字典对象
Set d = CreateObject("scripting.dictionary")
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'返回第一列最后一个非空行
'将数据区域导入数组
arr = Sheets("Sheet1").Range("A2:f" & LastRow)
'对数组进行循环
For k = 1 To UBound(arr)
'将每一行A-F列的内容的合并为一个文本,如果只是特定某几列,只需要修改这句代码
str = arr(k, 1) & arr(k, 2) & arr(k, 3) & arr(k, 4) & arr(k, 5) & arr(k, 6)
'对每一行的文本进行判断,如果在字典里不存在,就写入字典的关键字
If Not d.exists(str) Then
d(str) = ""
Else
'否则写入数组brr,对应的值为该文本的行值,第一行是标题行,因此是k+1
n = n + 1
ReDim Preserve brr(1 To n)
brr(n) = k + 1
End If
Next
'对数组brr进行逆序循环,将brr数组对应的行进行删除
For i = n To 1 Step -1
Cells(brr(i), 1).EntireRow.Delete
Next
Application.ScreenUpdating = True
End Sub