엑셀 매크로(VBA)는 변수를 선언하거나, 배열을 몰라도 할 수 있습니다.
저는 프로그램을 공부한 경험이 없지만, 업무에 필요한 일들은 엑셀 매크로(VBA)로 처리해 왔습니다. 따라서, 일반적인 VBA 스크립트와는 다소 다른 형식으로 작성합니다.
저와 같이 VBA를 배워간다면 어려운 변수 선언이나, 오브젝트를 설정하지 않고 직접 눈으로 보면서 스크립트를 만들어 갈 수 있습니다.
실제 사례를 통해서, 매크로(VBA)가 얼마나 쉬운지 설명드리겠습니다.
네이버 지식인 등에 많은 질문이 엑셀 파일 정리 중 하나가 바로 "중복 행 찾기" 입니다.
A라는 데이터 그룹과 B라는 데이트 그룹이 있으면,
A데이터에도 있고 B데이터에도 있는 것을 찾고 싶은 경우입니다.
예를 들자면, 회사에서 자기 부서에서 관리하고 있는 직원 명단에 옆 부서에서 관리 중인 직원 명단을 비교하는 경우에 생길 수 있는 등, 무수히 많은 경우가 있습니다.
이 경우 단순한 해결은 엑셀이 제공하는 함수 vlookup을 사용해서 같은 항목을 찾아낼 수 있습니다.
아래와 같이 2개의 쉬트가 있습니다.
첫째는 2020년 리스트이고
둘째는 2019년 리스트입니다.
이제 이 두 개의 쉬트를 비교해서 중복이 되는 회원을 F열에 기록하는 매크로(VBA)를 만들어 봅니다.
이름으로만 비교하는 경우 동명이인이 있을 수 있기에 보통 중복 데이터를 찾는다는 것은 이름 + 주민번호
또는 이름 + 핸드폰번호 등 입니다.
이곳에서는 이름 + 핸드폰 번호가 동일한 중복 데이터를 찾아서 F열에 중복여부를 기록하겠습니다.
왕 초보용 엑셀 매크로(VBA) 배우기 - 1 에서 알아봤던 3가지만 가지고 만들어 보도록 하겠습니다.
이것만 알면 VBA 스크립트를 작성할 수 있습니다.
① i = i +1
② if then else end if
③ for to next
직접 스크립트를 작성했습니다.
그 결과 중복 데이터를 찾아서 기록하는 스크립트는 위에서 중요한 3가지만 가지고 작성해도 충분합니다.
그리고 겨우 12줄로 충분했습니다.
실제로 구동되는(작동되는) 프로그램입니다.
프로그램에 등장하는 변수 선언도 없으며, 프로그램머가 사용하는 전문적인 명령어는 한 가지도 없습니다.
거의 자연어에 가깝게 읽고 이해할 수 있습니다.
Sheets("명단2019년").Select 라는 명령어를 살펴보면 너무 잘 알 수 있습니다.
"Sheets("명단2019년").선택해라" - 별다른 설명을 할 필요가 없습니다.
엑셀 매크로(VBA)는 대부분 이렇게 작성할 수 있습니다. (하지만 효율적이지는 않습니다. - 프로그램을 실행하면 엑셀은 힘들어요. 하지만 내가 힘들지 않기 때문에 상관없어요.)
위 로직은 단순합니다.
명단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로 만든 것 등등 데이터가 비교할 수 없도록 된 경우가 빈번합니다.
이경우 중복명단을 찾아낼 수 없기에 데이터를 일원화를 하고 상호 비교 작업을 하게 됩니다.
그것을 배워보도록 하겠습니다.