[ 기초 강좌 ]
제 38 강
중복자료 정리하기
Excel의 생명이라고 할 수 있는 중복자료 정리하기
그 사용법을 알아봅니다.
이럴 때 필요해요
중복되어있는 자료들이 마구잡이로 섞여 있을 떄, 유일한 데이터만 추출하기 위해서 필요합니다.
이렇게 사용해요
먼저, 예시를 살펴보겠습니다.
아래의 그림처럼 C5,C6,C7...영역의 중복된 데이터를 아무셀(F5셀)을 클릭했을때, F5:F13영역처럼
유일한 데이터만 나오게 하려면,
아래의 수식이 필요합니다. (컬렉션 개체(Collection Object)를 사용하여 해결하는 방법으로 접근해 보도록 하겠습니다.)
Sub ExtractOneItem() |
'// 먼저, 등장인물과 배역을 각각 지정해 주었습니다.
'// 변수 rngAll은 아이템들이 있는 전체 영역을 지정하기 위한 Range 오브젝트이고, 변수 rngCell은
'// For Each~Next 문으로 rngAll 내에 있는 각 셀들에 접근하기 위한 오브젝트이며, 또한 rngOut은
'// 정리된 데이터를 출력할 위치로 선택하게 될 셀의 오브젝트 변수입니다.
'// 그런데, 그 다음에 Dim X As New Collection이라는 듣도 보도 못한 새로운 것이 하나 나왔지요?
'// 이것이 바로, 컬렉션 오브젝트 입니다. 이것을 통해 새로운 아이템들을 임시로 담아 둘 수 있는데
'// 상세한 내용은 아래에서 설명을 드리도록 하겠습니다.
Set sht = ActiveSheet |
'// 현재 활성화된 시트, 즉 ActiveSheet를 sht라는 시트 오브젝트 변수에 담아 두고, rngAll에는 앞에서
'// 정의된 sht의 3번째 열 중에서 문자열이 들어 있는 모든 셀이 포함이 됩니다.
'// 즉, 문자열이 연속되지 않아도 되는 것이지요. 그리고 변수 rngOut은 앞에서도 소개해 드린 바와 같이
'// 정리된 아이템들을 출력할 위치로써, 즉 사용자가 선택하게 될 셀의 위치로 정의합니다.
On Error Resume Next |
'// On Error Resume Next는 "에러가 발생하더라도 계속해서 그 다음 문장을 실행하라"는 뜻이라는 건
'// 다들 아실 터이고, 여기서 한 가지 유념하셔야 할 점은 오늘의 컬렉션 오브젝트의 사용을 위해서는
'// 이 구문을 반드시 적어 주어야 한다는 것입니다. 그 이유는… 아래에서 설명드겠습니다.
For Each rngCell In rngAll X.Add rngCell.Value, CStr(rngCell.Value) |
'// 컬렉션 오브젝트의 기본적인 사용형태는 [오브젝트명.Add Item, key, (before), (after)] 입니다.
'// 여기서 key의 요소(정식 용어로는 argument라고 하지요)는 Unique한 텍스트, 즉 중복되지 않는
'// 텍스트일 경우에만 유효합니다.
'// 이게 무슨얘기냐 하면, 만약에 위에서 나왔던 값을 밑에서 또 만나게 되면 에러가 발생하게 되고
'// 따라서 아이템에도 추가가 되지 않는다는 얘기입니다. 또한, 이러한 성질머리를 최대한 활용해서
'// 오늘의 과제를 해결하게 되는 것이지요.
'// 다시 한번 더 정리해 보면, key라는 argument가 사용되면 중복되는 값이 나타 날 경우, 에러가 발생
'// 하게 됩니다. 또한, 에러가 발생되면 당연히(!) 아이템이 추가가 되지 않을 것입니다.
'// 그렇지만, 위에서 On Error Resume Next라는 구문을 사용하여 미리 조치해 두었으므로 프로그램
'// 자체를 종료하지는 않고 (대부분의 경우, 에러가 발생하면 프로그램 자체가 종료됩니다) 그 다음의
'// 아이템을 계속 순환하면서 새로운 아이템이 발견될 경우, 이를 추가하게 되는 것이지요.
'// 즉, 에러가 발생되면(중복 아이템이 있으면) 아이템이 추가가 되지 않습니다.
Next rngCell |
For Each varItem In X rngOut.Offset(r, 0) = varItem r = r + 1 Next varItem |
'// 앞서 컬렉션 오브젝트인 X에 임시로 저장한, 정리된 아이템(들)에 대해 다시 순환문을 돌려서 변수
'// 앞서 컬렉션 오브젝트인 X에 임시로 저장한, 정리된 아이템(들)에 대해 다시 순환문을 돌려서 변수
Next varItem End Sub |
오늘 소개해 드린 Collection Object는 아마 실무에서도 응용할 부분이 많으리라 생각됩니다.
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.