|
ムーン さん、kobasanさん、Hirohumiさん こんばんは。
Dictionaryを使えるようになろうと、kobasanさんのを参考に
勉強がてらに作ってみたのですが・・・
私が作ると、以下のようになります。
Sub test()
Dim myR As Range, r As Range
Dim Dic As Object
Dim myKey
With Sheets("Sheet1")
Set myR = ActiveSheet.Range("A1", Range("A65536").End(xlUp))
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each r In myR
myKey = r.Text & r.Offset(, 1).Text & r.Offset(, 2).Text
If Dic.Exists(myKey) Then
Dic(myKey) = Dic(myKey) + r.Offset(, 3).Text
Else
Dic.Add myKey, r.Offset(0, 3).Text
'Dic(myKey) = r.Offset(0, 3).Text
End If
Next
For Each myKey In Dic.keys()
For Each r In myR
If r.Text & r.Offset(, 1).Text & r.Offset(, 2).Text = myKey Then
r.Offset(, 4) = Dic(myKey)
Exit For
End If
Next
Next
End With
Application.ScreenUpdating = True
Set Dic = Nothing
Set myR = Nothing
End Sub
そこで、
For Each r In myR
myKey = r.Text & r.Offset(, 1).Text & r.Offset(, 2).Text
If Dic.Exists(myKey) Then
Dic(myKey) = Dic(myKey) + r.Offset(, 3).Text
Else
Dic.Add myKey, r.Offset(0, 3).Text
'Dic(myKey) = r.Offset(0, 3).Text
End If
Next
と
> For Each r In rngA.Cells
> dkey = r.Text & r.Offset(, 1).Text & r.Offset(, 2).Text
> Dic.Item(dkey) = Dic.Item(dkey) + r.Offset(, 3).Text
> Next
は、
同じ事をしているのだと思うのですが、kobasanさんのコードが
理解できません。
Dictionary自体をよく理解していないので、とんちんかんな質問なら
申し訳ないのですが、教えていただけますか?
>Dic.Item(dkey) = Dic.Item(dkey) + r.Offset(, 3).Text
この段階で、 ~~~~~~~~~~~~~~~~は、まだ定義されていないので
エラーになるような気がするのですが(もちろんエラーにはなりませんが)。
Range("A1").Value = Range("A1").Value + 1の様な場合は、
初めは、Range("A1").Value がNULL値(?)=0または、""と考えられるのですが・・・
>Dic.Item(dkey) = Dic.Item(dkey) + r.Offset(, 3).Text
の場合は、まだ辞書(Dic)に何も登録していないのに、同じように考えて
いいのでしょうか?
宜しくお願いします。
|
|