[VBA] Dictionary에 대한 이해4 - Dictionary & Collection2
Dictionary의 Item으로서의 Collection 사용
Dictionary의 Item으로 올 수 있는 것들은 String,Number,Sheet,Workbook,Dictionary,Collection,True,False,.. 등이 있다.
Dictionary의 Item으로 Collection를 쓸 수 있다는 것이다.
Dictionary를 이용해 항목별로 시트 나누기
Sub groupByEmployee()
Dim sT: sT = VBA.Timer
Dim oDic As Scripting.Dictionary
Set oDic = New Scripting.Dictionary
Dim rngX As Range: Set rngX = Range("A1").CurrentRegion
Dim r As Long
Dim rngY As Range
Dim sKey As String
Dim oCol As Collection
For r = 2 To rngX.Rows.Count
Set rngY = rngX.Rows(r)
sKey = rngY.Cells(1).Value
If oDic.Exists(sKey) Then
oDic.Item(sKey).Add rngX.Rows(r)
'oDic.Item(sKey) 은 Collection 임. 그림1참조
Else
Set oCol = New Collection
oCol.Add rngX.Rows(1) '제목 행 추가
oCol.Add rngX.Rows(r) 'Collection에 rngX.Rows(r)의 데이타 넣어둔다
oDic.Add sKey, oCol 'Dictionary에 Collection추가
End If
Next r
Application.ScreenUpdating = False
Dim sht As Worksheet
'--------------------------------
'시트명 '원본'이외의 시트삭제하기
Application.DisplayAlerts = False
For Each sht In Worksheets
If Not (sht.Name = "원본") Then sht.Delete
Next sht
Application.DisplayAlerts = True
'--------------------------------
'종업원별로 시트 생성하기
Dim vKey As Variant
Dim j As Long
For Each vKey In oDic.Keys
Set sht = Worksheets.Add(After:=Worksheets(Worksheets.Count))
sht.Name = vKey
Set oCol = oDic.Item(vKey)
For j = 1 To oCol.Count
sht.Range("A" & j).Resize(1, 4).Value = oCol.Item(j).Value '그림2참조
Next j
Next vKey
Worksheets("원본").Activate
Application.ScreenUpdating = True
MsgBox VBA.Timer - sT
End Sub
반응형
'엑셀로 풀어가는 세상' 카테고리의 다른 글
[VBA] Dictionary에 대한 이해3 - Dictionary & Collection1 (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 |