| 
    
     |  | ▼kanabun さん お世話になります。
 申し訳ないのですが、今書いていただいたVBAを自分なりに読みこなしているのですが、全体的にここで何をしているのかといったことが分からなく、もしよろしければ、注釈を付けていただけるとありがたいです。自分で調べろっといった感じだと思いますがよろしくお願いします。後半のあたり判定は大体分かるのですが、前半はから何が何だか分からない状態です。
 特にv(i, 1)のような表現が結局意味するところが全然わからなく困っています。時間が許しましたらご教授ください。
 
 >Sub test3()
 >  Dim dic As Object
 >  Dim i As Long, n As Long
 >  Dim r As Range
 >  Dim v, ID
 >
 >  Set dic = CreateObject("Scripting.Dictionary")
 >  Set r = Worksheets("Sheet1").Cells(1).CurrentRegion
 >  v = Intersect(r, r.Offset(1)).Value
 >  For i = 1 To UBound(v)
 >    If Not dic.Exists(v(i, 1)) Then
 >      Set dic(v(i, 1)) = _
 >        CreateObject("Scripting.Dictionary")
 >    End If
 >    dic(v(i, 1))(v(i, 4)) = Array(v(i, 2), v(i, 3))
 >  Next
 >
 >  Dim a1, a2
 >  Dim b1, b2
 >  Dim vv
 >  Set r = Worksheets("Sheet2").Cells(1).CurrentRegion
 >  With Intersect(r, r.Offset(1))
 >    v = .Resize(, 3).Value
 >    vv = .Columns(4).Cells.Value
 >  End With
 >  For i = 1 To UBound(v)  'Sheet2 2行目から
 >    vv(i, 1) = Empty
 >    If dic.Exists(v(i, 1)) Then
 >      a1 = v(i, 2)
 >      a2 = v(i, 3)
 >      vv(i, 1) = "ハズレ"
 >      For Each ID In dic(v(i, 1)).Keys()
 >        b1 = dic(v(i, 1))(ID)(0)
 >        b2 = dic(v(i, 1))(ID)(1)
 >        Select Case b1
 >         Case Is < a1
 >           If b2 > a1 Then
 >             vv(i, 1) = ID
 >             Exit For
 >           End If
 >         Case Is > a1
 >           If b1 < a2 Then
 >             vv(i, 1) = ID
 >             Exit For
 >           End If
 >        End Select
 >      Next
 >    End If
 >  Next
 >  r.Item(2, 4).Resize(UBound(vv)).Value = vv
 >
 >End Sub
 
 
 |  |