| 
    
     |  | ▼kanabun さん お世話になります。先ほどは全然不明点だらけで分からなかったのですが、できる限り自分で調べてみました。不明点が多くて申し訳ないですが、プログラムの意味をそれぞれ教えてください。よろしくお願いします。
 Sub test3()
 Dim dic As Object
 Dim i As Long, n As Long
 Dim r As Range
 Dim v, ID
 'dicに重複しないリスト作成する
 Set dic = CreateObject("Scripting.Dictionary")
 'Sheet1のデータ範囲
 Set r = Worksheets("Sheet1").Cells(1).CurrentRegion
 'vは見出しを除いた行数
 v = Intersect(r, r.Offset(1)).Value
 '見出しを除いた行数作業を繰り返すループ
 For i = 1 To UBound(v)
 'dicにデータが無いのならclass列のデータを格納?
 If Not dic.Exists(v(i, 1)) Then
 '_は何? dic(v(i, 1)) = _の意味がいまいちわからない
 Set dic(v(i, 1)) = _
 CreateObject("Scripting.Dictionary")
 End If
 '? 急にArrayが出てきたdicに格納した(v(i, 1))(v(i, 4))と
 'Array(v(i, 2))(v(i, 3))を一致させるってこと?
 dic(v(i, 1))(v(i, 4)) = Array(v(i, 2), v(i, 3))
 Next
 
 Dim a1, a2
 Dim b1, b2
 Dim vv
 'Sheet2のデータ範囲
 Set r = Worksheets("Sheet2").Cells(1).CurrentRegion
 'withで何を省略しているのか分からない?Intersect?
 With Intersect(r, r.Offset(1))
 'v = Intersect(r, r.Offset(1)).Value = .Resize(, 3).Value?
 '結局、vはSheet2の見出しを除いた行数? vvは見出しを含めた行数?
 v = .Resize(, 3).Value
 vv = .Columns(4).Cells.Value
 End With
 '見出しを除いた行数作業を繰り返すループ
 For i = 1 To UBound(v)  'Sheet2 2行目から
 'vv(i, 1) = Emptyなにを意味してるか分からない
 vv(i, 1) = Empty
 'dicにデータが無いのならclass列のデータを格納?
 If dic.Exists(v(i, 1)) Then
 'a1というのはループ回数行の2列目(start値)
 a1 = v(i, 2)
 'a2というのはループ回数行の3列目(end値)
 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
 
 |  |