2017-03-09 60 views
1

我目前正在嘗試創建一個Excel VBA代碼,該代碼將在單個列中找到重複項時刪除整行。我創建了代碼,但由於某種原因,每次運行Excel時都會崩潰。誰能幫我?如何在單個列中存在重複條目時刪除重複行

Sub Test() 
    For i = 1 To 25 
     a = Cells(i, 1).Value 
     b = Cells(i + 1, 1).Value 
     If a = b Then 
      Rows(i + 1).Delete 
      i = i - 1 
     End If 
    Next i 
End Sub 

回答

0

兩種情況之一可以使此代碼問題:

1 - 如果你在A列的錯誤值(即#NA)比較If a = b將失敗,代碼將與錯誤代碼type mismatch停止

2-代碼可以進入無限循環(這就是爲什麼你認爲Excel中「崩潰」),因爲當你到達範圍的最後,你只能得到空行,這樣比較a = b總是成功(empty = empty),因此你不斷刪除行和循環.....

因此,正確的方法是應用通常的:從底部到頂部,當你刪除時循環。

Sub Test() 
    Dim i as Long 
    For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 step -1 
     If Cells(i, 1).Value = Cells(i - 1, 1).Value Then Rows(i).Delete 
    Next i 
End Sub 

最後,要注意此代碼不會刪除自帶對方下的任何重複,但只有重複。這看起來是你看到你的初始代碼的目標。

+0

非常感謝你,這個固定的錯誤! –

0

通過使用下面的代碼,你可以刪除重複值:

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