배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   Collection개체, 중복항목, 제거
제목:   Collection개체를 이용한 중복항목 제거
     
 

새 페이지 1

  STEP> Collection개체

필자가 가장 유용하게 사용하는 개체 중 하나는 Collection개체입니다. 비록 이것이 느리다는 단점과 많치 않는 property(속성)와 method(방법)를 제공하지만 배열보다 편리합니다.

물론 따로 List형 자료구조 클래스를 사용할 수도 있지만, 임시로 간단한 자료구조만 필요하고 빠른 처리를 요구하지 않는 작업이 대부분이라 애용하는 편입니다.

Collection개체에 데이터를 추가하는 경우 사용하는 method가 Add입니다. Add 메소드의 매개변수로는 Item, Key, Before, After입니다.

Item은 실제 입력되는 데이터이고, Key는 앞서의 Item과 연결되어 Item을 검색할 수 있는 말 그대로 key입니다. 그래서 이것은 key이므로 당연히 다른 Item의 Key와 중복될 수 없습니다.(key라고 하면 중복될 수 없다는 의미를 내포합니다) Collection에 저장된 내용을 가져오려면 Item메소드에 Item의 index값을 주거나 key값을 주면 됩니다.

보통 Add 메소드시 Item과 Key를 다르게 사용하지만 중복되지 않는 목록을 만들기 위해서는 Item을 Key로 사용합니다. 따라서 중복된 Item과 중복된 Key를 입력하게 됩니다. 그러나 Key값이 중복되면 해당 Item은 입력되지 않습니다. 그리고 457번 에러, 이 키는 이 컬렉션의 한 요소와 이미 연결되어 있습니다라는 에러메시지를 보여 줍니다.

중복되지 않는 목록을 가지고 싶은 경우 Key의 이러한 성질을 이용하는 것입니다. 다만 에러가 발생해도 다음 문장을 계속 실행하도록 "On Error Resume Next"를 붙여 주어야 합니다.

다음은 지금까지 설명한 내용을 코드로 옮긴 것입니다.

Sub CollectionDemo()

    Dim Teletubies      As New Collection
    Dim arrData
    Dim i               As Long  

    '// 에러가 나도 무시하고 다음 문장을 실행하도록 만든다.
    On Error Resume Next   

    '// 일부 중복된 항목을 가진 배열을 만든다.
    arrData = Array("보라돌이", "뽀", "보라돌이", "뽀", "라나", "뚜비") 

    '// 배열의 각 원소를 Collection개체에 추가한다.
    For i = LBound(arrData) To UBound(arrData)
        '// Item과 Key를 동일한 값으로 Add합니다.
        Teletubies.Add arrData(i), arrData(i)

    Next   

    On Error GoTo 0
    '// 중복되지 않는 목록을 보여줄 것이다.
    For i = 1 To Teletubies.Count
        Debug.Print Teletubies.Item(i)
    Next
End Sub

 
  추억의 개그
헤어질 시간에는..

우리나라 텔레토비
사회자: 자, 텔레토비 친구들~, 이제 헤어질 시간이에요.
텔레토비들: (일제히 몸을 흔들며) 싫어, 싫어~

북한 텔레토비
사회자: 자, 전파뚱뗑이 동무들~, 이제 꺼질 시간이라우
텔레토비들: 싫습네다, 싫습네다~