|
▼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
|
|