본문 바로가기
Life Information/IT이야기

엑셀 중복값 찾기 (3) - VBA 이용

by 세이대 2020. 7. 12.

엑셀 중복 값 찾기 (3) - VBA 이용 

엑셀은 전산관리, Data 관리 등 다양한 내용을 관리하기 위해 주로 사용하는 프로그램입니다. 간편한 인터페이스에 편리한 기능이 추가적으로 제공되어 있어, 편리하게 사용 가능하다는 점이 많은 사람들에 사랑받는 엑셀 프로그램의 비결이 아닐까요. 어쨌든, 이런 편리한 엑셀 프로그램, 그중에서도 여러 사람들이 자주 활용하게 되는 기능이 중복 값 찾기가 아닐까 생각해 봅니다.

 

 

엑셀 중복값 찾기 방법은 원하는 결괏값, 즉 중복 값을 확인하고 어떻게 결과를 나타내길 원하는지에 따라 엑셀 중복 값 찾는 방법의 선택지는 다양할 수 있을 것입니다. 기본적으로 많이 사용하는 엑셀 중복 값 찾기 방법은 "조건부 서식"을 이용한 방법과 "Countif"라는 엑셀 프로그램 내장 함수를 이용하는 방법이 있을 수 있습니다. 두 가지의 중복 값 찾기 방법의 차이점은 다음과 같습니다.

 

  • 조건부 서식을 이용한 방법 : 중복된 셀값에 서식으로 표현할 수 있습니다. 즉, 바탕색, 글자색 등의 스타일을 지정하여 중복 값에 대한 가시적인 표시가 가능한 방법이라 할 수 있습니다.
  • 내장 함수 Countif 함수를 이용한 방법: 검토하고 싶은 범위의 데이터에 대하여, 특정 셀 값과 같은 데이터의 개수를 확인할 때 주로 사용한다고 할 수 있습니다.
  • 두 방법은 지난날에 정리해 둔 글이 있으니, 한 번 읽어보시면 도움이 될 수 있으리라 생각됩니다.

 

간략하게 엑셀 중복값 찾기의 두 가지 방법을 살펴봤습니다. 조건부 서식으로 중복된 값을 표시하는 방법, 특정 데이터와 같은 값을 가지고 있는 셀의 개수를 세는 방법과는 다르게 중복 값의 데이터를 뽑아서 확인하고 싶을 수 있습니다. 이럴 경우 엑셀 VBA를 활용하면 간단하게 해결할 수 있는데요. 프로그램 언어로 반복적인 내용을 지시하는 '코딩'이라 생각하시면 되겠습니다.

 

 

컴퓨터는 만질 수 있어도, 프로그램언어를 활용하는 것에는 울렁증이 있을 수 있죠. 물론, 저도 그랬습니다. 엑셀 함수는 조금 적용할 수 있어도, VBA를 활용한 매크로를 짜는 것은 접근하기가 쉽지 않았는데요. 실제로 해보시면 몇 가지 규칙을 통해 엑셀 중복 값 찾기를 할 수 있습니다. 저와 같이 차근차근 살펴보도록 할게요. 

 

## 엑셀 VBA를 독학해서, 코드가 깔끔하지 못하다는 점 참고해 주시길 바랍니다.

## 기본적으로 원하는 기능이 작동되는 것에만 초점을 맞추고 있습니다. 작게나마 도움이 되면 좋겠네요.

 

◈ 엑셀 중복값 VBA로 활용해 보기  

엑셀에서 VBA를 사용하는 방법은 알고 계신다는 것을 전제로, 간편하게 기능이 작동하도록 만든 코드만으로 이야기를 진행하도록 하겠습니다. 우선, 다음 사진을 참고해 주세요.

중복 값을 찾기 위해 데이터 샘플이 필요하겠죠. 위 사진은 제가 임의로 선정한 샘플의 모습입니다. 엑셀은 시트의 셀로 표현되는 것이니, 원하는 형태를 미리 만들어 두거나, 그 상태를 잘 파악해 두는 것이 도움이 될 수 있습니다. 왜냐하면, VBA의 경우 문자로 작성되는 것이니 가시적인 부분이 조금 약할 수 있기 때문이죠. 물론, 저의 개인적인 경험담입니다.

 

 

제가 정한 엑셀 중복 값 찾기 샘플의 기준은 다음과 같습니다.

  • A그룹과 B그룹의 범위 내에 있는 데이터의 값이 서로 중복이 되는 경우 중복 결과 범위에 표현되도록 합니다.
  • A그룹 범위 내 데이터를 하나씩 선택합니다.
  • 선택된 A그룹 데이터와 B그룹 데이터를 순환하면서 같은 값이 있는지 확인합니다.
  • 중복 결과 그룹에 중복 데이터를 표시하도록 합니다.

 

위와 같은 결과값을 얻는 방법입니다. 우선은 코드부터 살펴보도록 하겠습니다. 

엑셀 프로그램에서 "alt + F11"을 선택해주시면 VBA를 입력할 수 있는 창이 뜹니다.

 

 

위 사진과 같은 창이 나타나면 엑셀 VBA 매크로 코드를 입력해 주시면 된답니다. 다른 프로그램 언어, 파이썬과 같은 언어는 들여 쓰기 등의 규칙이 있는데요. 이러한 규칙들을 지키면서 우리가 원하는 기능이 작동하도록 이쁘게 써주기만 하면 프로그램이 작동하게 된답니다.

 

## VBA로 코드를 작성해서 확인해보기 위해서는 전체를 실행해 보는 것도 좋지만,

## "F8"을 눌러 우리가 작성한 코드 한줄한줄씩 실행해 결과를 확인해 볼 수 있습니다.

 

 

코드를 살펴보도록 할게요. 

그전에 우리가 원하는 기능에 대한 구체적인 구상이 필요하겠죠. 우선은 A그룹의 데이터를 하나씩 변수로 설정되도록 합니다. 즉, A그룹 셀 데이터 값을 가지게 되는 변수 1이 필요하며, 변수 1과 B그룹 데이터를 순환하며 비교하도록 합니다. 그리고, 그 비교되는 값이 같은지를 확인해야겠죠. 여기서 필요한 VBA 규칙을 먼저 정리해 보도록 하겠습니다.

 

  • 순환 구조 만들기 for 문 사용하기 - for 문에 해당되는 동작을 반복하게 됩니다.
  • 두 값이 같은지 확인하기 - if문을 활용해 두 값이 같은지 확인합니다.
  • 확인된 두 값이 같으면 입력, 아니면 다시 비교를 합니다.

 

자, 코드의 의미를 알아보도록 하겠습니다. 우선은 가장 윗줄에 있는 내용인데요. 매크로의 이름을 지정하고, 특정 매크로의 시작을 선언하는 부분입니다.

 

 

매크로 선언은 'sub'로 시작해 '이름'을 넣고 '()'로 첫줄을 만듭니다. 그리고 선언된 매크로의 마지막을 표시해 두셔야 하는데요. 'end sub'를 입력해 주셔야 합니다. 컴퓨터가 알아들을 수 있도록 시작과 끝을 나타내는 기호라 생각해 주시면 되겠습니다. 사이에 기능을 넣어주시면 되는 것이죠.

 

 

엑셀 VBA에서 파일의 선택, 시트의 선택, 셀의 선택에서는 select를 사용하는데요. 예를 들어 'A1' 셀을 선택하기 위해서 cells(1,1). select라고 사용할 수 있는데요. select는 그 영역을 선택하는 기능을 activate는 활성화를 의미합니다.

Sheet1.Activate를 해주면, 시트 이름이 'Sheet1'을 가진 시트가 활성화가 됩니다. (당연히 원하는 기능이 작동될 시트를 선택해야겠죠.)

 

 

엑셀 중복값 찾기를 한 번만 할지, 혹은 양식을 만들어두고 두고두고 사용할지는 알 수 없으니, 매크로를 실행할 때마다 앞전에 확인된 결괏값을 지워두고 다시금 중복 값 관련 데이터를 입력하기 위한 코드입니다. 결론은 중복 값에 대한 데이터 초기화 코드라 생각해두면 좋을 것 같습니다. 

Range( , )는 해당되는 시트의 범위를 나타내는 것이며, 'ClearContents'의 경우 범위안에 있는 데이터를 지우라는 명령어입니다.

 

 

이제는 A그룹, B그룹 데이터에 대한 범위를 선정해 줘야합니다. 그래야 그 범위에서 해당되는 셀 값의 개수를 변수 a, b로 선정해 두는 코드입니다. 즉, A그룹의 전체 데이터 개수를 확인해서 순환할 때의 개수를 지정하기 위해 변수로 저장해두는 부분입니다.

Count는 범위 내의 데이터 셀의 개수를 확인하는 명령어입니다. end(xlto__)는 범위의 방향을 선정하는 것인데요. 엑셀 시트에서 'ctrl + 방향키' 부분이라고 생각하시면 된답니다. 

 

 

이제 순환부화 확인부를 체크하는 부분입니다. for문은 지정된 변수의 시작에서 끝까지 반복하라는 것을 나타냅니다. 물론, 중첩으로도 사용 가능하죠. 차근차근 살펴볼게요. 

 

for 변수 = 시작점 to 끝점 (형태로 지정해주시면 됩니다.) 물론, 반복되는 문구의 끝도 알려줘야겠죠. next 변수 를 지정해주면서 그 사이에 있는 명령어를 반복해주게 됩니다.

 

 

위 사진과 같이 순환할 부분을 지정해 주시면 됩니다. 우리가 원했던 것은 A그룹 데이터 순환 체크, B그룹 데이터 순환 체크를 해야 하니 순환문을 사용하도록 합니다. 순환문은 For, do While, do until 이렇게 있습니다. 저는 개인적으로 For 문이 편하네요. 

 

### 활성 시트의 셀의 주소를 알려주는 방법은 여러개가 있습니다.

### 순환을 하니 셀 주소를 수로 지정해주는 것이 편리한 것 같습니다.

### cells(행번호, 열 번호)로 표시해 주시면 된답니다. A1부터 cells(1,1)로 시작합니다.

 

 

이제는 확인부로 두 셀의 값이 같은지를 판단해 줘야 하겠죠. 그리고 두 데이터의 값이 같으면 우리가 원하는 범위에 중복 값을 표시하도록 명령해주는 부분입니다. 

 

if 문의 경우 같은 값이면 then 이후의 명령을 수행하라는 것이며, else를 넣어주면 같지 않을때의 명령을 수행할 수 있으며, 위와 같이 else가 없다면 그냥 넘어가게 됩니다. 

 

count의 경우 중복결과를 넣으면 옆자리로 이동해야 하므로, 셀 주소를 옮기는 용도로 넣어둔 변수입니다.

마지막으로 제가 선정한 샘플에서의 엑셀 중복 값 찾기 데이터에 맞는 엑셀 VBA 코드입니다. 상당히 간단하다는 것을 알 수 있죠. 이보다 더 간단한 코드도 분명 존재할 것입니다. 필요한 기능이 작동하도록 규칙에 맞게 글을 작성해 주는 것이기에 사람마다 차이는 있을 수 있으리라 생각되네요. 이것으로 엑셀 중복 값 찾기 VBA활용에 관련된 글을 마치도록 하겠습니다. 작게나마 도움이 되면 좋겠습니다. 감사합니다.

반응형

댓글