| 
    
     |  | 面白そうなので、私も考えてみました。 やはり、Dictionaryを使いたくなりますね。
 
 Sub Sample()
 Dim v As Variant, i As Long
 Dim r As Range
 Dim dic As Object, itm As Variant, ind As Variant
 Dim loopEnd As Boolean
 
 Set dic = CreateObject("scripting.dictionary")
 v = Sheets("Sheet2").Range("A1").CurrentRegion.Resize(, 1).Value
 For i = 1 To UBound(v)
 Set dic.Item(v(i, 1)) = New Collection
 Next
 Set r = Sheets("Sheet1").Range("A1").CurrentRegion
 v = r.Value
 
 Do
 loopEnd = False
 For i = 1 To UBound(v)
 If dic.Exists(v(i, 1)) Then
 On Error Resume Next
 dic.Item(v(i, 1)).Add i, CStr(i)
 On Error GoTo 0
 If Not dic.Exists(v(i, 2)) Then
 Set dic.Item(v(i, 2)) = New Collection
 loopEnd = True
 End If
 End If
 Next
 Loop While loopEnd
 
 ReDim vv(1 To UBound(v), 0)
 For Each itm In dic.Items
 For Each ind In itm
 vv(ind, 0) = "←削除対象"
 Next
 Next
 Set dic = Nothing
 r.Resize(, 1).Offset(, r.Columns.Count).Value = vv
 End Sub
 
 
 削除していい行の場合、空列セルに"←削除対象"と印をつけてみました。
 あとは、その印を目印に行削除すればいいと思います。
 なお、老婆心ながら、削除の際はその列で一旦ソートして、
 削除したい行を上下どちらかに纏めてから削除して下さい。
 
 Do 〜 Loopのところが肝ですが、あまり検証してないので誤ってたらごごめんなさい。
 
 
 |  |