|
面白そうなので、私も考えてみました。
やはり、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のところが肝ですが、あまり検証してないので誤ってたらごごめんなさい。
|
|