Dictionary의 Item으로 올 수 있는 것들은 String,Number,Sheet,Workbook,Dictionary,Collection,True,False,.. 등이 있다.
즉 눈에 띄는 것이 Dictionary이다.
Dictionary의 Item으로 다른 Dictionary를 쓸 수 있다는 것이다.
Sub Double_Dictionary240116()
Dim oDic As New Scripting.Dictionary
Dim rngO As Range
Dim vData As Variant
Dim sKey As String, r As Long
Set rngO = Range("a2").CurrentRegion
vData = rngO.Offset(1).Resize(rngO.Rows.Count - 1).Value
'"rngO.Offset(1).Resize(rngO.Rows.Count - 1)"구간의 값을 vData라는 배열방에 집어넣는다.
Dim oDicX As Scripting.Dictionary
For r = 1 To UBound(vData, 1)
sKey = Join(Array(vData(r, 2), vData(r, 3), vData(r, 4), vData(r, 5)), "-")
If oDic.Exists(sKey) Then
Set oDicX = oDic.Item(sKey)
'odic(딕셔너리)의 item값은 odicx(딕셔너리)이다.
'--->odic의 item값은 odicx이다
oDicX.Item("money") = oDicX.Item("money") & "+" & vData(r, 6)
'oDicX.Item("money")의미:odicx의 key값이 money인 item의 값!
'즉 딕셔너리odicx에서 money의 item값!!
oDicX.Item("subject") = oDicX.Item("subject") & "/" & vData(r, 8)
Else
Set oDicX = New Scripting.Dictionary 'odicx라는 새로운 딕셔너리 생성하여
oDicX.Add "money", vData(r, 6)
'key값이 money이며 vdata(r,6)을 item값으로 하여 odicx(딕셔너리)에 더한다.
oDicX.Add "subject", vData(r, 8)
'key값이 subject이며 vdata(r,8)을 item값으로 하여 odicx(딕셔너리)에 더한다.
oDic.Add sKey, oDicX
'key값이 skey이며 odicx를 item값으로 하여 odic(딕셔너리)에 더한다.
End If
Next r
Dim key As Variant
Dim rTarget As Range
Dim iR As Long
Dim vMoney As String, vSubject As String
Set rTarget = Range("a20")
iR = 1
For Each key In oDic.Keys
vMoney = oDic.Item(key).Item("money")
'odic.item(key)는 odicx딕셔너리임!!!.
'따라서 odicx.item("money")는 vdata(r,6)임??
vSubject = oDic.Item(key).Item("subject")
rTarget.Offset(0, 1).Resize(1, 4).Value = Split(key, "-")
rTarget.Offset(0, 5).Value = Application.Evaluate(vMoney)
rTarget.Offset(0, 7).Value = vSubject
rTarget.Value = iR '??????
iR = iR + UBound(Split(vSubject, "/")) + 1 '???????
Set rTarget = rTarget.Offset(1, 0)
Next
End Sub
https://www.youtube.com/watch?v=IMhzMtDCUO8&t=1075s
반응형
'엑셀로 풀어가는 세상' 카테고리의 다른 글
[VBA] Dictionary에 대한 이해4 - Dictionary & Collection2 (0) | 2024.01.17 |
---|---|
[VBA] Dictionary에 대한 이해3 - Dictionary & Collection1 (0) | 2024.01.17 |
[VBA] Dictionary에 대한 이해1 (0) | 2024.01.11 |
엑셀 VBA #93 / 특정 폴더 내, 파일통합_VBA필수 [VBA] (0) | 2024.01.04 |
엑셀 VBA #90 / 데이터재배치 [VBA] (0) | 2023.12.31 |
엑셀 VBA #85 / 이벤트 프로시저와 find 메서드 활용하기 [VBA] (1) | 2023.12.30 |
엑셀 VBA #127 / Vlookup시리즈3_배열+Dictionary활용 [VBA] (0) | 2023.12.28 |
VBA - Dictionary(Late vs Early Binding) by 우노사설 (0) | 2023.12.23 |