초보용

왕 초보용 엑셀 매크로(VBA) 배우기 - 2 (중복 행 찾기 1/4)

by 지천명영어 posted Jan 12, 2022
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

가 크게 작게 위로 아래로 댓글로 가기 인쇄

엑셀 매크로(VBA)는 변수를 선언하거나, 배열을 몰라도 할 수 있습니다.

​

저는 프로그램을 공부한 경험이 없지만, 업무에 필요한 일들은 엑셀 매크로(VBA)로 처리해 왔습니다. 따라서, 일반적인 VBA 스크립트와는 다소 다른 형식으로 작성합니다. 

​

저와 같이 VBA를 배워간다면 어려운 변수 선언이나, 오브젝트를 설정하지 않고 직접 눈으로 보면서 스크립트를 만들어 갈 수 있습니다.


 

실제 사례를 통해서, 매크로(VBA)가 얼마나 쉬운지 설명드리겠습니다.

​

네이버 지식인 등에 많은 질문이 엑셀 파일 정리 중 하나가 바로 "중복 행 찾기" 입니다.

​

A라는 데이터 그룹과 B라는 데이트 그룹이 있으면, 

A데이터에도 있고 B데이터에도 있는 것을 찾고 싶은 경우입니다.

​

예를 들자면, 회사에서 자기 부서에서 관리하고 있는 직원 명단에 옆 부서에서 관리 중인 직원 명단을 비교하는 경우에 생길 수 있는 등, 무수히 많은 경우가 있습니다.

​

이 경우 단순한 해결은 엑셀이 제공하는 함수 vlookup을 사용해서 같은 항목을 찾아낼 수 있습니다. 

​

아래와 같이 2개의 쉬트가 있습니다.

 

첫째는 2020년 리스트이고

이미지 000001.png

 

 

둘째는 2019년 리스트입니다.

이미지 000002.png

 

이제 이 두 개의 쉬트를 비교해서 중복이 되는 회원을 F열에 기록하는 매크로(VBA)를 만들어 봅니다.

이름으로만 비교하는 경우 동명이인이 있을 수 있기에 보통 중복 데이터를 찾는다는 것은 이름 + 주민번호

또는 이름 + 핸드폰번호 등 입니다.

​

이곳에서는 이름 + 핸드폰 번호가 동일한 중복 데이터를 찾아서 F열에 중복여부를 기록하겠습니다.

​

​왕 초보용 엑셀 매크로(VBA) 배우기 - 1 에서 알아봤던 3가지만 가지고 만들어 보도록 하겠습니다.

 

 

이것만 알면 VBA 스크립트를 작성할 수 있습니다.

​


① i = i +1 

② if   then  else end if

③ for    to    next 


 

직접 스크립트를 작성했습니다.

그 결과 중복 데이터를 찾아서 기록하는 스크립트는 위에서 중요한 3가지만 가지고 작성해도 충분합니다.

그리고 겨우 12줄로 충분했습니다.

 

이미지 000003.png

 

 

실제로 구동되는(작동되는) 프로그램입니다.

프로그램에 등장하는 변수 선언도 없으며, 프로그램머가 사용하는 전문적인 명령어는 한 가지도 없습니다.

거의 자연어에 가깝게 읽고 이해할 수 있습니다.

Sheets("명단2019년").Select 라는 명령어를 살펴보면 너무 잘 알 수 있습니다.

"Sheets("명단2019년").선택해라" - 별다른 설명을 할 필요가 없습니다.

​

엑셀 매크로(VBA)는 대부분 이렇게 작성할 수 있습니다. (하지만 효율적이지는 않습니다. - 프로그램을 실행하면 엑셀은 힘들어요. 하지만 내가 힘들지 않기 때문에 상관없어요.)

 

이미지 000004.png

 

위 로직은 단순합니다.

​

명단2020년 1번에 있는 식별자(i_id-김회원010-1234-5678)를 명단2019년에서 8명을 전부 검색해서 회원이름 + 핸드폰번호가 같으면 명단2019년 F칼럼에 "중복"이라고 기재합니다. 같은 식으로 1번, 2번, 3번 ~ 10번까지 검색합니다.

즉 명단2020년 회원 10명 각각을 명단2019년 회원 8명 각각에 대입해서 일치 여부를 판단하게 됩니다.

​

엄청 명쾌하고 단순합니다.

​

위 스크립트는 명단2019년에만 중복여부를 표시하게 됩니다.

만약 명단2020년에도 중복여부를 표시하려면 어떻게 하면 될까요?

if 문 속에 Cells(j, 6) = "중복"에 한번 엔터를 쳐서 줄바꿈을 한 다음

Sheets("명단2020년").Select

Cells(i, 6) = "중복"

2줄을 넣어주면 됩니다.

​

위 스크립트는 2중 루핑(looping)을 도는 구조입니다.

파란색 네모칸은 명단2020년을 루핑하게 하고

빨간색 네모칸은 명단2019년을 루핑하게 합니다.

​

엑셀 파일을 보면서 직접 타이핑하면서 익혀 놓으세요. 두말할 필요없이 많이 사용하는 개념입니다.

​

왕초보용_매크로(VBA)_2.xlsm (파일 다운로드 클릭하세요)​

​

우리가 다 알고 있지만, 실제로 이름은 위 사례처럼 딱 3자리로 구성되지도 않았고, 공백이 있는 경우도 있고, 띄어쓰기도 틀립니다. 심지어 괄호 속에 특징을 적어 놓기도 합니다.

그리고 전화번호는 앞에 0이 없는 것, 010/1234/4567로 구분한 것, 어떤 경우는 010 1234 5678로 만든 것 등등 데이터가 비교할 수 없도록 된 경우가 빈번합니다.

​

이경우 중복명단을 찾아낼 수 없기에 데이터를 일원화를 하고 상호 비교 작업을 하게 됩니다.

그것을 배워보도록 하겠습니다.

​

​


Articles

1 2 3