엑셀 VBA #65 / 질문 답변(데이터 취합) [VBA]
[하나의 통합문서에 있는 여러 시트들의 데이터들을
중복데이터 제거 후 '통합'시트에 하나로 취합하는 방법]
해결 방법
1. 엑셀 기능(RemoveDuplicates) 적용한 VBA코딩
2. New Collection활용 한 VBA코딩
1. 엑셀 기능(RemoveDuplicates) 적용한 VBA코딩
Sub 통합생성_고유항목만_1()
Dim shAll As Worksheet
Dim sh As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False '기존 통합시트 삭제시 '삭제하시겠습니까?'라는 메세지창 나오기 않게!
On Error Resume Next '만약 기존 통합시트가 없는 경우에, 아래 코드 실행시 에레 발생하므로
본 코드삽입하여 에레발생하면 그냥 넘어가라는 의미
Sheets("통합").Delete
On Error GoTo 0
Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "통합"
Set shAll = Sheets("통합")
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> ActiveSheet.Name Then '만약 시트 이름이 activesheet(현재활성화된 시트=통합)이름과 다르다면
sh.Range("A1").CurrentRegion.Copy shAll.Cells(Rows.Count, "a").End(xlUp).Offset(1)
End If
Next
shAll.Range("A2").CurrentRegion.RemoveDuplicates (Array(1, 2))
shAll.Rows(1).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
2. New Collection활용 한 VBA코딩
Sub 통합생성_고유항목만_2()
Dim shAll As Worksheet
Dim sh As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Sheets("통합").Delete
On Error GoTo 0
Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "통합"
Set shAll = Sheets("통합")
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> ActiveSheet.Name Then
sh.Range("A1").CurrentRegion.Copy shAll.Cells(Rows.Count, "a").End(xlUp).Offset(1)
End If
Next
'----------------------------------------
'New Collection
'----------------------------------------
Dim rng As Range, c As Range
Dim pc As New Collection
Dim e As Variant
Dim i
Set rng = shAll.Range("A2", shAll.Cells(Rows.Count, "A").End(xlUp))
On Error Resume Next
For Each c In rng
If Len(c) Then
pc.Add Trim(c), CStr(Trim(c))
End If
Next
On Error GoTo 0
For Each e In pc
i = i + 1
shAll.Cells(i, "d") = e
shAll.Cells(i, "e") = rng.Find(e, , , xlWhole).Offset(, 1).Value
Next
shAll.Columns("a:c").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
https://www.youtube.com/watch?v=Tp7qn6n_wVM&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=65
ㅁㅁㅁ
'엑셀로 풀어가는 세상' 카테고리의 다른 글
엑셀 VBA #122 / 헷갈리는 시트, 셀 제어 [VBA] (0) | 2023.12.20 |
---|---|
엑셀 VBA #126 / Vlookup시리즈2_배열 활용 [VBA] (0) | 2023.12.19 |
엑셀 VBA #119 / Dictionary 개체_실무 [VBA] (0) | 2023.12.19 |
엑셀 VBA #118 / Dictionary 개체_기본 [VBA] (0) | 2023.12.19 |
엑셀 VBA #52 / 중복데이터 처리_5 [VBA]-고유항목별 합계구하기 (0) | 2023.12.16 |
엑셀 VBA #51 / 중복데이터 처리_4 [VBA] - 사용자정의함수 (0) | 2023.12.16 |
엑셀 VBA #50 / 중복데이터 처리_3 [VBA]-Union (0) | 2023.12.15 |
엑셀 VBA #49 / New Collection_버블정렬의 콜라보 [VBA] (0) | 2023.12.15 |