Sub TransformAndWriteData()
Dim Data As Variant ' 원본 데이터를 저장할 변수
Dim Temp As Variant ' 변환된 데이터를 저장할 변수
Dim dict As Object ' 딕셔너리 객체를 저장할 변수
Dim Valu As Long ' 데이터 열의 최대 개수를 저장할 변수
Dim i As Long ' 반복문에서 사용할 인덱스 변수
Dim x As Long ' 새로운 행의 인덱스를 저장할 변수
Dim xx As Long ' 데이터 열의 인덱스를 저장할 변수
' Data 시트에서 데이터를 가져옴
Data = Sheets("Data").Cells(2, 2).CurrentRegion
' 딕셔너리 객체를 생성
Set dict = CreateObject("Scripting.Dictionary")
' 변환된 데이터를 저장할 배열을 초기화
ReDim Temp(1 To UBound(Data), 1 To UBound(Data))
For i = 2 To UBound(Data)
' 딕셔너리에 해당 ID가 없으면 새로운 행을 추가
If Not dict.Exists(Data(i, 1)) Then
dict.Add Data(i, 1), ""
x = x + 1
xx = 3
Temp(x, 1) = x
Temp(x, 2) = Data(i, 1)
Temp(x, xx) = Data(i, 2) & "-" & Data(i, 3)
Else
' 딕셔너리에 해당 ID가 있으면 데이터를 추가
xx = xx + 1
Temp(x, xx) = Data(i, 2) & "-" & Data(i, 3)
End If
' 데이터 열의 최대 개수를 업데이트
If xx > Valu Then Valu = xx
Next i
' Result 시트에 결과를 작성
With Sheets("Result")
.UsedRange.Clear
.Cells(1, 1).Resize(, 2) = Array("No", "Id") ' 헤더
.Cells(1, 3).Resize(, Valu - 2) = "Data" ' 데이터 열의 헤더
.Cells(2, 1).Resize(x, Valu).Value = Temp ' 변환된 데이터
' 셀 크기를 자동으로 조정하고 테두리를 설정
With .UsedRange: .Columns.AutoFit
.Borders.Weight = 2
End With
End With
End Sub
매크로 실행 전
매크로 실행 후
* 이 코드는 공부용으로 이런 작업은 파워쿼리로 간단하게 해결 가능합니다.
'Dictionary' 카테고리의 다른 글
카테고리별로 시트 생성하여 나누기 (0) | 2024.02.19 |
---|