Dictionary의 Item으로서의 Collection 사용
Dictionary의 Item으로 올 수 있는 것들은 String,Number,Sheet,Workbook,Dictionary,Collection,True,False,.. 등이 있다.
Dictionary의 Item으로 Collection를 쓸 수 있다는 것이다.
Sub Dic_Col240117()
Dim oDic As New Scripting.Dictionary
Dim rngX As Range
Dim vData As Variant
Dim sKey As String
Dim r As Long
Dim Col As New Collection
Dim vMoney As String, vSubject As String
Set rngX = Range("a2").CurrentRegion
vData = rngX.Offset(1).Resize(rngX.Rows.Count - 1).Value
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 Col = oDic.Item(sKey)
'oDic딕셔너리에 담겨진 sKey의 item값이 Col로 리턴된다.
'oDic.Item(sKey)는 oDic의 value를 의미한다
'본 모듈에서 Collection이 Dictionary의 Item으로 구성되는 것으로 예시하고 있다.
vMoney = Col.Item("money") & "+" & vData(r, 6)
'상기 코드를 아래와 같이 하면 안된다..이유는
'Col.Item("money")=Col.Item("money")& "+" & vData(r, 6)
'Collection은 정해진 것을 불러오기는 되지만,
'정해진 것을 수정할 수 없기 때문이다????.
Col.Remove "money"
Col.Add vMoney, "money"
vSubject = Col.Item("subject") & "/" & vData(r, 8)
Col.Remove "subject"
Col.Add vSubject, "subject"
Else
Set Col = New Collection
Col.Add vData(r, 6), Key:="money"
Col.Add vData(r, 8), Key:="subject"
oDic.Add sKey, Col
End If
Next r
Dim Key As Variant
Dim rTarget As Range
Dim iR As Long
iR = 1
Set rTarget = Range("a20")
For Each Key In oDic.Keys
vMoney = oDic.Item(Key).Item("money")
'oDic.Item(Key) : Col을 리턴한다.
'=>Col.Item("money")로 리턴한다.
vSubject = oDic.Item(Key).Item("subject")
'oDic.Item(Key) : Col을 리턴한다.
'=>Col.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
반응형
'엑셀로 풀어가는 세상' 카테고리의 다른 글
[VBA] Dictionary에 대한 이해4 - Dictionary & Collection2 (0) | 2024.01.17 |
---|---|
[VBA] Dictionary에 대한 이해2 - Double Dictionary (0) | 2024.01.16 |
[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 |