2017-04-04 6 views
2

現在、Excelファイルを検索して重複エントリを削除するプログラムを作成しようとしています。エントリが異なるときにExcelマクロでエントリを削除する

これを行うコードを作成しました。ただし、複製前と複製後にエントリを削除する必要があります。私はどこにでも見てきたし、例を見つけることができない、助けてください!

これらは私の例では、私はThe1とThe2を残して両方の車のエントリを削除するには、それを必要とするだろう

The1 
Car 
Car 
The2 

エントリです。 は、ここに私のコードで、これまで

Sub rar() 
    Dim i As Long 
    With Worksheets("Sheet1") 'DEFINES WHICH SHEET TO USE' 
     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+1).Delete 
      Rows(i).Delete 
      Rows(i-1).delete 
     End If 
    Next i 
    End With 
End Sub 
+0

このコードは、あなたが望む仕事をしているようです。行のインデックスを 'i-2'、' i-1'、 'i'に変更する必要があることを除けば、現在の行の代わりに行を削除する必要があります。 – Masoud

+0

オフセットプロパティを使って作業する – 0m3r

答えて

2

クリス・ニールセンは、以下の指摘したように - Withは素晴らしいアイデアだった使用していますが、彼らはあなたが指定したワークシートを参照することを確認するためにあなたのセル範囲の参照の前に.を配置する必要がありますテストされていない - しかし、考え方はループTHRとして、あなたの範囲を構築作成することです:

Sub rar() 
    Dim i As Long, rng As Range 
    With Worksheets("Sheet1") 'DEFINES WHICH SHEET TO USE' 
     For i = 3 to .Cells(.Rows.Count, "A").End(xlUp).Row 
     If .Cells(i, 1).Value = .Cells(i - 1, 1).Value Then 
      If rng Is Nothing Then 
       Set rng = .Rows(i - 2 & ":" & i) 
      Else 
       Set rng = Union(rng, .Rows(i - 2 & ":" & i)) 
      End If 
     End If 
    Next i 
    End With 
    rng.Delete 
End Sub 

注:お使いのWithトークン

でこれを試してみてください最後に削除してください。このようにして、後方へのループを心配する必要はありません。

+1

'With'がないことを忘れてしまったと思いますが、' With'ブロック変数を参照してください –

+0

@chrisneilsen良い点、ありがとう! – CallumDA

+1

ありがとう、問題を修正しました! –

関連する問題