2017-03-09 5 views
1

現在、1つの列に重複が見つかった場合に行全体を削除するExcel VBAコードを作成しようとしています。コードを作成しましたが、何らかの理由でExcelを実行するたびに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 - コードが無限ループに入ることができますが、範囲の最後に到達したときにのみ、空の行を取得するための比較a = bは常に(を成功するように、(あなたがエクセル「クラッシュ」だと思う理由です))、行を削除し続けてループする.....

したがって正しい方法は、いつものものを適用することです。削除するときは下から上にループします。

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 
関連する問題