본문 바로가기

엑셀VBA/VBA 기본

엑셀 VBA - Collection 활용한 중복 제거

엑셀 VBA

Collection을 활용한 중복 제거


1. Collection 객체

    중복 제거를 할 때 가장 유용한 객체는 Collection 입니다. Collection의 경우 각 값에 고유 key 값을 부여 하기 때문에

중복 key 값이 들어 올 경우 자동으로 중복된 내용을 제거해 주는 기능을 하고 있습니다. 

 

Sub collection_method()

Dim newCol As Collection        'Collction 선언
Set newCol = New Collection     '새로운 Collection할당

newCol.Add Item, Key           'add사용 (추가)
strCol = newCol.Item(Index)    '해당index 값 반환
intCnt = newCol.Count          'collection 갯수 반환
newCol.Remove 1                '해당index 제거\
End Sub

2. Colletion을 이용한 중복 제거

 배열을 이용한 중복 제거는 배열을 재지정 해야 하기 때문에 복잡한 부분이 많다. 하지만 collecion 을 이용하면 key 값을 이용해서 쉽게 중복제거 및 중복값들의 합계를 쉽게 계산할 수 있다

Sub remove_deplicate_useCollection()

Dim newCol As Collection                                '컬렉션 선언
Dim imsi1 As Integer, imsi2 As Integer                  '임시 데이터 받을 변수
Dim i As Integer                                        '순환문용 변수

Set newCol = New Collection                             '컬렉션 생성
On Error Resume Next                                    '에러가 발생해도 코드 진행

For i = 1 To Cells(Rows.Count, 1).End(3).Row
    newCol.Add Array(Cells(i, 1), Cells(i, 2), Cells(i, 3)), Cells(i, 1)  '컬렉션에 데이터 삽입
    If Err.Number <> 0 Then                                               '에러가발생하면
        imsi1 = newCol.Item(Cells(i, 1))(1)                               '두번째 항목을 임시변수에 저장
        imsi2 = newCol.Item(Cells(i, 1))(2)                               '세번째 항목을 임시변수에 저장
        newCol.Remove Cells(i, 1)                                         ' 해당 키 값을 제거
        newCol.Add Array(Cells(i, 1), Cells(i, 2) + imsi1, Cells(i, 3) + imsi2), Cells(i, 1) '새로운 컬렉션 항목 추가
        
        Err.Clear '에러 제거
    End If
Next i

'========컬렉션 데이터 출력============

For i = 1 To newCol.Count                                                    ' 컬렉션 전체 순환
    Cells(i, "e") = newCol(i)(0)                                             '첫번째 항목 표시
    Cells(i, "f") = newCol(i)(1)                                             '두번째 항목 표시
    Cells(i, "g") = newCol(i)(2)                                             '세번째 항목 표시
Next i
MsgBox "완료"

End Sub

3. 실행 영상

 

4. Collection의 장점

  - 배열의 경우 한번 정한 크기를 변경하기 어렵다. 배열의 크기를 변경하는 방법이 없지는 않지만 이런 부분에 있어서는 Collection 이 훨씬 편하게 이용할 수 있다.

 

5. Collection의 단점

 - Collection은 읽기 전용이기 때문에 한번 할당된 데이터를 변경할 수 없다. 데이터를 변경하기 위해서는 해당 값을 삭제하고 다시 할당을 해야 한다.