![[VBA 제 38강] 중복자료 정리하기 썸네일 이미지 [VBA 제 38강] 중복자료 정리하기 썸네일 이미지](/smartediter/upload_img/thum_1538460855.png)
엑셀쿠키는 한 번의 다운로드로 평생 이용하실 수 있습니다. 프로그램과 데이터를 고객의 PC에 저장하여 사용하는 형식이라 안전하게 사용 가능합니다. 이용 기간에 따른 추가 비용이 발생하지 않아 매우 경제적입니다.
중소기업의 개별 특성, 다양한 업무를 상황별로 고려하여 제작된 프로그램을 업데이트합니다. 분야별 5,000여 개의 프로그램 중 내 업무에 맞는 프로그램을 다운받는 맞춤형 서비스입니다.
쿠키 프로그램은 MS Excel의 기본 사용법만 알면 즉시 사용할 수 있는 매운 쉬운 프로그램으로 누구나 손쉽게 배우고 사용할 수 있습니다.
중소기업의 모든 업무자동화!
쿠키의 업무자동화 프로그램은 VBA 코드로 개발된 제품으로
MS Excel 프로그램 기반으로 사용 가능하며,
자체적으로 개발한 기능은 물론,
MS Excel의 강력한 기능을 모두 사용하실 수 있습니다.

엑셀쿠키는 기업의 생산성을 높이는 업무자동화 지원 프로그램입니다.
[ 기초 강좌 ]
제 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. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.
![[VBA 제 38강] 중복자료 정리하기 [VBA 제 38강] 중복자료 정리하기](/common/images/cmm/view_middel.jpg)