ADD (2)
엑셀 VBA #47 / 중복데이터 처리_1 [VBA]- Removeduplicates. 고급필터. New Collection
반응형

엑셀 VBA #47 / 중복데이터 처리_1 [VBA]

중복데이터 처리 방법
1. Removeduplicates

    영역.RemoveDuplicates 중복제거할 열표시, Header포함여부

 

    cf, 중복제거 기준 열이 2이상 일 경우??????

     영역. RemoveDuplicates (array(1,2,...)), Header포함여부
2. 고급필터
3. New Collection


1. Removeduplicaste
Sub 중복데이터_removeduplicate()

Dim rng As Range
Set rng = Range("A1", Cells(Rows.Count, "A").End(xlUp))

rng.Copy Range("D1")
Range("D1").CurrentRegion.RemoveDuplicates 1, xlYes     '영역에서 첫번째 열 기준을 중복제거

End Sub

 


2. 고급필터
Sub 중복데이터_고급필터()
Dim rng As Range
Set rng = Range("A1", Cells(Rows.Count, "A").End(xlUp))

rng.AdvancedFilter xlFilterInPlace, , , 1

'xlFilterInPlace : '현재 위치 필터' 적용 의미
rng.SpecialCells(xlCellTypeVisible).Copy Range("D1")
ActiveSheet.ShowAllData

End Sub

3. New Collection
Sub 중복데이터_New_Collection()

Dim rng As Range

Dim c As Range
Dim dc As New Collection  '고유목록만 모여질 변수로 받음
Dim i As Long

Set rng = Range("A1", Cells(Rows.Count, "A").End(xlUp))

'------------------------------------------------------
'고유목만 dc변수방에 모우기
'------------------------------------------------------
On Error Resume Next

For Each c In rng
    If Len(c) Then '만약 변수c에 값이 있으면  ' 'If Not nc Is Nothing Then'으로 해도 결과동일하네... 
        dc.Add Trim(c), CStr(Trim(c))
    End If
Next

'------------------------------------------------------
'고유목을 뿌리기
'------------------------------------------------------
For i = 1 To dc.Count
    Cells(i, "D") = dc(i)
Next

End Sub

vba#47.xlsm
0.02MB



https://www.youtube.com/watch?v=Zr2pd5ZMfDQ&list=PLfxvqpVCYZ8e0qlyc_FU46neoWjO7yTWj&index=47

엑셀 VBA #35 / 고급필터 [VBA]
VBA - 중복값 제거(New Collection)
엑셀 VBA #65 / 질문 답변(데이터 취합) [VBA]    RemoveDuplicates (Array(1,2)

반응형
  Comments,     Trackbacks
vba - 고유목록 추출(New Collection,Add)
반응형

고유목록 추출

A열의 목록에서 '고유목록'을 추출하여,
B열에 있는 값들 중 '고유목록'에 해당하는 값들의 합계를 구해서 넣는 것으로
SUMIF함수를 이용하여 값을 구할 수 있다.

고유목록은 New Collection객체를 이용하여 추출할 수 있어서 For Each ~ Next문으로 Add매서드를 이용하여 구할 수 있다.
(New Collection객체는 중복된 항목을 제거하고 고유의 항목만 가지게 하는 객체로서
고유한 목록을 추가해 주는 Add매서드를 반드시 이용하여 작업해야 함)

New Collection객체의 변수 sj에 Add매서드를 이용하여, 공백제거된 문자화된 고유의 목록만 저장
sj.Add Trim(r),CStr(Trim(r))

'-----코드 시작
Dim sj As New Collection
Dim r As Range
Dim k As Long

On Error Resume Next   '중복된 값이 있으면 에러를 발생시킴으로 에러가 나면 그냥 넘어가라
For Each r in Range("A2:A21")
sj.Add Trim(r),CStr(Trim(r))    '고유항목만 뽑아서 공백을 제거하고, 텍스트화
Next
On Error Goto
'-----코드 끝



sj에 저장된 고유의 목록을 k변수의 순서에 따라 For문에 넣어 반복하고, 목록과 값이 들어갈 셀에 넣어주면 됨
(합계를 구하는 함수는 sumif을 이용하여 구해서 넣어줌)


'----코드 시작
For k = 1 to sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Application.Sumif(Range("A2:A21"),sj(k),Range("B2:B21")
Next
'-----코드 끝





Range("A2:A21")와 Range("B2:B21")을 변수처리하여 문장을 조금 더 간단하게 만들어 주어도 될 것 같네요

'----코드 시작-
Dim tk As Range, kr As Range
Set tk = Range("A2:A21")
Set kr = Range("B2:B21")

For k = 1 To sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Applcation.Sumif(tk,sj(k),kr)
Next
'-----코드 끝



https://blog.naver.com/romyok12/222930690848



반응형
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
TODAY TOTAL