엑셀 중급_VBA 와 매크로 (14)
엑셀의 매크로는 기존 엑셀의 명령어처럼 컨트롤 + Z를 이용한 되돌리기 기능이 되지를 않습니다. 그러나 실행 취소를 하기를 원한다면 실행 취소에 관한 코드를 매크로에 추가 하면 됩니다. 이번 시간부터는 본격적으로 엑셀 VBA코드를 조금씩 수정해 보면서 엑셀의 기능을 1000프로 확장해 보도록 하겠습니다.
객체 지향 언어의 객체와 속성, 그리고 매서드(Method)
강의의 초반부에 엑셀의 VBA는 객체 지향 언어로써 객체와 속성 그리고 매서드(Method) 로 구성 된다고 했습니다. 무조건 구별을 해야 할 필요는 없지만 내가 매크로를 만들 때 만들어 진 코드는 어떤 것일까를 간단히 예측 할 수 있다면 코드를 보자마자 빠른 해석이 가능 합니다. 예를 들어 셀에 두 줄을 긋는 매크로를 만든다고 하면 셀과 밑줄은 객체가 되고 셀에 두 줄을 긋는 것은 행위, 즉 매서드(Method)가 됩니다. 그리고 그 줄이 두 줄이 될지는 줄이란 객체의 속성이 됩니다. 물론 무엇이 속성이 되고 무엇이 객체가 되는 지는 절대 정해 진 것은 없고 마이크로 소프트의 VBA 공식 홈페이지에 가야 모두 확인 할 수 있지만 중급에서 거기까진 필요 없다고 판단합니다. 딱 여기 까지만 예측을 하고 코드를 들여다 보면 간단한 영어만 하셔도 코드의 대부분이 한눈에 들어오게 됩니다.
매크로 기록 하고 코드 살펴 보기
필자는 VBA 명령어의 90프로 이상을 이 매크로 기능을 통해 자동으로 생성된 VBA코드를 통해 배웠습니다. 그래서 처음부터 VBA코드를 만들지 못하더라도 자동으로 생성된 VBA코드를 이해하는 능력은 혼자 실력을 키울 수 있는 매우 튼튼한 밑바탕이 됩니다. 그래서 셀에 두 줄을 긋는 매크로를 기록하고 또 두 줄을 제거하는 매크로를 기록해서 두 매크로의 VBA코드를 한번 살펴 보면서 VBA코드를 해석 하는 기본을 소개 하겠습니다.
지금부터 모든 매크로의 기록과 기록 중지는 필자가 가장 좋아하는 방법인 상태 표시줄을 이용 하겠습니다. 만약 상태 표시줄에 매크로 기록이 보이시지 않는다면 상태 표시줄 우클릭으로 매크로 기록을 체크해 주시면 됩니다.
매크로 이름은 DoubleUnderline 으로 하겠습니다. 그리고 단축키를 입력할 때 시프트만 누른 상태로 알파벳을 입력하면 시프트+컨트롤+알파벳의 단축키가 지정 됩니다. 컨트롤 단축키는 거의 대부분 이미 사용 중이므로 시프트 조합 단축키를 추천 드립니다.
이중 밑줄을 선택 하면 됩니다.
정지를 누르고 다시 매크로 기록을 하면서 밑줄 취소를 하겠습니다. 매크로 이름은 어차피 사라질 매크로이니 아무 것이나 상관 없습니다.
이제 내 통합 문서에 밑줄을 긋는 매크로와 취소하는 매크로가 기록 되었습니다.
Alt + F11을 눌러서 VBA에디터에 들어가 보시면 두 개의 매크로가 하나의 모듈에 있는 것을 볼 수 있습니다. 만약 파일을 닫았거나 하면 두 개의 매크로가 각 각 다른 모듈에 저장 되나 상관은 없습니다.
여기서 VBA의 명령어를 하나도 모른다고 해도 전혀 상관 없습니다. 우리가 확실히 알고 있는 것은 첫 번째 프로시저(Procedure)는 밑줄을 긋는 것이고 두 번째는 취소하는 것 이라는 것 입니다.
VBA if 문 이해하기
모든 코딩에서 if 는 코딩의 꽃이라 할 수 있습니다. If 는 만약에 라는 뜻이죠. If 문 때문에 코딩의 논리 문이 구성이 되고 조건에 따라 다른 결과물이 구성이 됩니다. 여기서 밑줄의 버튼을 누르는 것을 생각 하면 if 밑줄이 있다면 >> 밑줄을 제거하라 또는 if 밑줄이 없다면 >> 밑줄을 그어라 이렇게 되는 것이지요. 함수의 논리는 거의 모든 프로그래밍 언어가 거의 동일 합니다. 문법이 약간씩 차이가 나는 것 뿐이므로 하나의 컴퓨터 언어를 하면 다른 언어를 이해하기는 매우 쉬워 집니다. 엑셀 VBA의 if 문의 논리는 다음과 같습니다.
If 조건 then
Else 조건이 아닐 때
End If
여기서 조건에 만약 밑줄이 그어져 있다면 밑줄을 취소하고 아니라면 밑줄을 그어라 의 if문이 완성 됩니다. 여러분이 기억하셔야 할 것은 VBA의 함수 보다 이 If 논리문이고 기억이 안난다면 언제든지 검색을 하실 수 있습니다.
VBA 코딩의 요령
엑셀의 VBA에서 기본으로 포함하고 있는 명령어들은 항상 첫 글자가 대문자로 시작하게 됩니다. 그래서 내가 대문자로 타입을 해도 되지만 항상 모든 명령어를 소문자로 입력을 하면 내가 바르게 입력을 했을 때는 자동으로 대문자로 변경이 되고 만약 실수로 타이핑을 잘 못 했다면 소문자 그대로 남아 있게 되어서 코딩의 실수 가능성을 줄여 줍니다. 또 엑셀의 VBA 에디터는 굉장히 기본적인 기능만을 가지고 있어서 IF 논리문의 본문을 자동으로 들여 쓰기를 해주지 않습니다. 코드의 기능에는 전혀 상관 없지만 거의 모든 프로그래밍 에디터에서 지원해 주는 기능으로 코드 작성자가 훨씬 코드를 알아보기 쉽게 하기 위해 논리 문이 확장 될 때마다 들여쓰기를 해주는 습관을 들여 두면 좋습니다.
두 번째 프로시저(Procedure)의 본문을 잘라 내기를 합니다.
그리고 첫 번째 프로시저(Procedure)의 본문에 붙이고 불필요한 나머지 부분은 삭제를 합니다.
첫 번째 밑줄의 속성을 if 문을 넣어서 밑줄이 있다면 이라는 논리로 바꾸었습니다. 자연스럽게 밑줄을 취소하라는 논리로 연결됩니다.
이제 Else 즉 밑줄이 없다면 밑줄을 그어라 라는 논리를 첫 번째 밑줄 속성을 그대로 카피해서 붙입니다.
그리고 '를 이용해서 나중에 내가 봐도 한눈에 알아 볼 수 있도록 설명을 넣어 줍니다. 설명에는 한글이 들어가도 오류가 없습니다.
If문 가운데의 본문을 선택 후 탭을 눌러서 들여 쓰기를 해 두면 코드가 복잡해도 구분이 쉬워 집니다.
이제 컨트롤 + 시프트 + U를 누르면 두 줄을 긋습니다.
한번 더 누르면 취소 합니다.
매우 간단한 예제로 if문을 살펴 봤지만 논리의 구성만 알면 코드가 길어 지는 것뿐이지 코딩은 그 논리 구조에서 벗어 나지 않습니다. 앞으로 소개할 몇 가지의 논리만 더 배우면 거의 모든 코딩을 할 자신감이 붙습니다. 단지 숙달되지 않아서 오류가 자주 나고 고치고 완성하는데 시간이 오래 걸릴 뿐이지 혼자서 할 수 있게 됩니다.
'엑셀 중급 > VBA와매크로' 카테고리의 다른 글
16_엑셀 VBA for next문 완벽히 이해하기 (6) | 2016.01.06 |
---|---|
15_엑셀 매크로 상대참조로 기록 (0) | 2016.01.06 |
13_엑셀 매크로 VBA 합치기의 유용한 기술 (2) | 2016.01.06 |
12_엑셀 매크로 이름 수정하기 (0) | 2016.01.06 |
11_엑셀 매크로 보안 설정 진짜 쉽게 하기 (2) | 2016.01.05 |