| 
    
     |  | みなさんこんにちは 
 半分遊びというか、こんな発想は受け入れられるのか?
 というコードなのですがどうでしょうか?
 1900/1/1〜2079/6/5の期間限定で日付のシリアル値をRowとして
 Rangeに格納後Intersectで重複判定してみました。
 
 発想の転換で楽しくコード勉強中です。
 
 
 Sub test()
 '####### 1900/1/1〜2079/6/5の期間限定 #######
 '日付のシリアル値をRowとしてRangeに格納後Intersectで重複判定
 
 Dim myDic As Object, i As Long, j As Long
 Dim dat As Variant, key_name As Variant, item_row As Variant
 Dim myRng As Range, chk_Rng As Range
 Dim key_row() As String, hit_name As String
 
 Cells.Interior.ColorIndex = xlNone
 dat = Range("A2", Range("D65536").End(xlUp)).Value
 Set myDic = CreateObject("Scripting.Dictionary")
 j = 0
 ReDim key_row(j)
 For i = 1 To UBound(dat)
 If Not myDic.exists(dat(i, 1)) Then
 j = j + 1
 myDic.Add dat(i, 1), j
 ReDim Preserve key_row(j)
 key_row(j) = i
 Else
 key_row(myDic.Item(dat(i, 1))) = _
 key_row(myDic.Item(dat(i, 1))) & "," & i
 End If
 Next i
 key_name = myDic.keys
 For i = 0 To UBound(key_name)
 item_row = Split(key_row(i + 1), ",")
 If UBound(item_row) > 0 Then
 Set myRng = Range(Cells(CLng(dat(item_row(0), 3)), 1), _
 Cells(CLng(dat(item_row(0), 4)), 1))
 For j = 1 To UBound(item_row)
 Set chk_Rng = Range(Cells(CLng(dat(item_row(j), 3)), 1), _
 Cells(CLng(dat(item_row(j), 4)), 1))
 If Not Application.Intersect(myRng, chk_Rng) Is Nothing Then
 Cells(item_row(j) + 1, 1).Resize(, 4).Interior.ColorIndex = 6
 hit_name = hit_name & vbLf & key_name(i)
 End If
 Set myRng = Union(myRng, chk_Rng)
 Next j
 End If
 Next i
 MsgBox "重複者リスト" & vbLf & hit_name
 Set myDic = Nothing
 Set myRng = Nothing
 Set chk_Rng = Nothing
 End Sub
 
 
 |  |