尝试删除具有与VBA中之前相同值的单元格的行

时间:2017-08-18 15:54:38

标签: excel vba

我正在尝试使用A列删除重复记录,我似乎已经一些成功,但我仍然发现重复。希望有人能告诉我如何改进这一点。

由于

Dim i       As Integer
Dim value   As String

i = 3
Range("A" & i).Select

Do Until IsEmpty(ActiveCell)
    Range("A" & i).Select
    value = ActiveCell.value
    Do Until IsEmpty(ActiveCell)
        If ActiveCell.value = value Then
            ActiveCell.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
    i = i + 1
Loop

3 个答案:

答案 0 :(得分:3)

避免使用选择和活动单元格。

使用向后循环的For循环。

Dim i As Long
Dim ws As Worksheet

Set ws = ActiveSheet 'This can be changed to a specific sheet: Worksheets("sheetName")

With ws

    For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 3 Step -1
        If .Cells(i, 1).value = .Cells(i - 1, 1).value Then
            .Rows(i).Delete
        End If
    Next i
End With

这只会将值与上面的值进行比较。如果要删除所有重复项,请使用@ Petay87答案。

答案 1 :(得分:1)

我相信如果要删除所有A列的重复项并且没有标题行,以下内容将对您有用:

ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo

答案 2 :(得分:1)

删除行时,需要反向循环。请尝试以下代码,

Sub removeDupes() 
Dim i As Long 
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row 
    If Range("A" & i).Value = Range("A" & i + 1).Value Then 
        Range("A" & i + 1).ClearContents 
    End If 
Next i 
For i = Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1 
    If IsEmpty(Range("A" & i)) Then 
        Range("A" & i).EntireRow.Delete 
    End If 
Next i 
End Sub