|
▼T.K さん:
>▼kanabun さん
>できる限り自分で調べてみました。
> 不明点が多くて申し訳ないですが、
> プログラムの意味をそれぞれ教えてください。よろしくお願いします。
本題はDictionaryだと思いますが、それ以外の 今夜すぐ理解できる疑問
についてだけ お答えします。
>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")
は 単に
Set dic(v(i, 1)) = CreateObject("Scripting.Dictionary")
という一行を(一行にすると掲示板上で強制改行されて読みにくくなる
恐れがあるので) _を使って改行した、ということです。
> '? 急に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))
「Intersect(r, r.Offset(1))」は Sheet1 でやったから分かりますよね?
いま
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5
という表があるとき、
> Set r = Worksheets("Sheet2").Cells(1).CurrentRegion
で変数r には [a1:d5] がセットされます。
「Intersect(r, r.Offset(1))」は この範囲r と 範囲rを1行下にシフト
した範囲 r.Offset(1) の重なる範囲(共通する範囲)を返します。
[a1:d5]と この範囲を Offset(1) した [a2:d6]範囲の重なる範囲とは
[a2:d5]です。つまり、元の表範囲から先頭行を除外したい範囲を指定
したいときは このように書きます(他の書き方もありますが)。
With はこのIntersectした範囲が Withされてます。
> v = .Resize(, 3).Value
> vv = .Columns(4).Cells.Value
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5
この範囲を .Resize(, 3) と3列だけにリサイズすれば、
a2 b2 c2
a3 b3 c3
a4 b4 c4
a5 b5 c5
です。
またこの範囲の .Columns(4).Cells とは 4列目のすべてのセル
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5
ということですから、[D2:D5] というセル範囲がそれです。
(とりあえず きょうはここまで)
|
|