あるシートがあります。
H列に英数字半角の顧客IDが入っています。(H1は見出しです)
★それらのIDで重複していたら、それらの行ごとすべて削除するというマクロをお願いしたいのです。
例
H
顧客ID
aaa
bbb
ccc
ddd
ccc
eee
↑の例でしたら、cccが重複していますので、cccが入っている行を2行まとめて削除して、
上につめていただきたいです。重複しているデータは1つに限らず、何個も重複していたり、
重複がまったくないときもあります。
行はどこまで続くかは不明ですので、H列の欄が空白になった時点でマクロを止めるようにしてください。
H列は変わることがありますので、”H”を入れておいていただけますでしょうか。
よろしくお願いいたします。
行全体を消すということなので、下記でどうでしょうか。
重なっているデータの行をすべて消すという説明なので、
H列がAA,BB,CC,AA,BB,AA だと CC の行だけになる処理です。
Option Explicit Const ID_ROW = "H" Sub DeleteDuplicatedRows() Dim objDic Set objDic = CreateObject("Scripting.Dictionary") Dim r As Long r = 2 Do While Cells(r, ID_ROW).Value <> "" objDic(Cells(r, ID_ROW).Value) = objDic(Cells(r, ID_ROW).Value) + 1 r = r + 1 Loop Application.ScreenUpdating = False Do While r >= 2 If objDic(Cells(r, ID_ROW).Value) >= 2 Then Cells(r, ID_ROW).EntireRow.Delete r = r - 1 Loop Application.ScreenUpdating = True End Sub
xが列数、yが開始データの行数です。
比較元の行も削除するようにしています。
Sub hatena()
x = 1
y = 1
Do While Cells(y, x).Value <> ""
id1 = Cells(y, x).Value
z = y + 1
flag = 0
Do While Cells(z, x).Value <> ""
If Cells(y, x).Value = Cells(z, x).Value Then
Cells(z, x).Delete Shift:=xlUp
flag = 1
Else
z = z + 1
End If
Loop
If flag = 1 Then
Cells(y, x).Delete Shift:=xlUp
Else
y = y + 1
End If
Loop
End Sub