엑셀 중급_VBA 와 매크로 (9)

VBA 란 Visual Basic for Application 의 약자로 비쥬얼 베이식 언어 중 마이크로 소프트의 오피스의 응용 프로그램을 생성하기 위한 프로그램 언어 입니다. 엑셀의 매크로는 초보자는 어려울 수 있는 VBA코드를 자동으로 생성해 줍니다. 매크로 기록을 시작하면 내가 엑셀 상에서 행하는 모든 것들이 기록이 되며 VBA코드로 바로 변환이 되어 모듈이라는 파일 안의 또 다른 공간에 저장이 됩니다. 엑셀에서 매크로 기능만으로 모든 반복되는 작업을 기록하는 것에는 한계가 있으며 엑셀의 VBA를 활용하게 되면 상상하시는 거의 모든 작업의 자동화가 가능 합니다. 그러나 VBA는 컴퓨터 언어입니다. 배우기에는 어렵지 않지만 숙달에는 많은 시간을 필요로 합니다. 중급 코스에서는 VBA를 직접 개발하기 보다 매크로로 자동으로 만들어 진 VBA코드를 이해하고 변환해서 프로그래밍의 자신감을 기르는데 집중 하겠습니다.

09연습파일.xlsm

  1. VBA 편집기 창 이용하기

    마이크로 소프트의 비쥬얼 스튜디오 라는 개발 툴의 이름을 한번씩은 들어 봤을 거라고 생각 됩니다. 비쥬얼 베이식으로 프로그래머들이 더 쉽게 코딩을 할 수 있도록 라이브러리 등 최적의 개발 환경을 구성해 주는 프로그램입니다. 엑셀이나 다른 오피스 프로그램의 VBA편집기는 엑셀에 기본적으로 딸려 오는 프로그램 툴인 만큼 매우 원시적인 기능 만을 가지고 있습니다. 많은 기능을 제공 하진 않지만 또 바꾸어 말하면 기능이 많지 않으므로 이해하는데 그렇게 어렵지 않다는 말도 되겠지요. VBA편집기를 여는 방법은 단축키를 이용하시는 것을 권합니다. 그리고 VBA수정을 하려고 한다면 반드시 외워야 하는 필수 단축키 입니다.

    VBA 편집기 창 열기

    Alt + F11

    단축키를 열면 보게 되는 화면이 VBA편집기 입니다. 엑셀의 버전이 업그레이드 되면서 버튼들이 화려해 졌지만 이 VBA개발 환경은 초기 버전부터 크게 바뀌지 않아서 도스 시절 프로그램과 흡사한 느낌입니다.

     

    1번 영역은 엑셀의 리본 탭과 비슷한 엑셀 VBA코딩을 위한 툴들의 버튼 입니다. 엑셀 VBA편집기의 기능들을 쉽게 찾기 위해서 이용하는 공간 입니다.

    2번 영역은 내가 열수 있는 모든 VBA프로젝트를 보여 줍니다. 엑셀의 VBA코드는 개별 워크시트, 또는 모듈이라고 불리는 파일, 또는 PERSONAL.XLSB라고 불리는 엑셀 프로그램에 저장 될 수 있습니다. 3가지 위치의 차이점은 쉽지요. 만약 VBA매크로가 어떤 파일에도 작동하게 하고 쉽다면 PERSONAL.XLSB에 저장, 파일 전체에 작동하게 하고 싶다면 모듈, 특정 시트에만 작동하게 하려면 시트에 저장 하면 됩니다. 그렇지만 시트에 프로그램을 저장하게 되면 나중에 많은 문제점을 발생 시킬 수 있으므로 거의 사용하지 않습니다.

    3번 영역은 잘 활용하지는 않지만 모듈의 이름을 변경할 때 가장 많이 활용 됩니다. 모듈의 여러 속성을 보여 줍니다.

    4번 영역은 실제 코딩 된 VBA 코드 입니다.

  2. VBA 코드 간단히 살펴 보기

    필자는 VBA의 90프로 이상을 이 매크로를 통해서 배웠습니다. VBA 문법의 기초만 익힌 후 내가 필요한 매크로를 생성해 보고 어떻게 VBA로 변환이 됐는지 확인을 하며 필요한 부분을 습득해 나갔습니다. 그러므로 지금 중급 코스에서는 VBA를 코딩 하는 것보다 자동으로 만들어 진 코드를 어떻게 수정하고 이해할지 소개 하겠습니다.

     

    코딩을 전혀 해보지 않은 분이라면 이 화면을 보고 당황하는 것은 당연합니다. 지금은 코딩을 전혀 모르셔도 됩니다.

     

    VBA 코딩을 수정하려면 최소한 이것 정도는 알아야 합니다.

    Sub과 End Sub은 하나의 매크로 명령어를 구성 합니다. 예를 들어 우리가 매크로 버튼을 눌렀을 때 행해 지는 하나의 과정이 이 Sub 과 End Sub 사이에 모두 들어 갑니다.

    코드 앞에 ' 가 붙은 줄은 코드랑 전혀 상관없이 코드 안에서의 코멘트 입니다. 내가 코딩을 할 때 기억하기 쉽게 붙일 수도 있고 매크로가 이용자들이 알아보기 쉽도록 자동으로 생성 해주는 것도 있습니다. 지워도 프로그램의 동작에는 전혀 상관 없습니다.

    자동으로 생성된 코드의 모든 부분이 중요한 것은 아닙니다. 엑셀은 프로그램 코드에 따라 매크로의 동작 이외에도 여러 가지 불필요한 기본 값들을 추가 합니다. 내가 만약 나중에 알아 보기 쉽게 하려면 불필요한 코드들은 제거해 주셔도 아무 상관이 없습니다.

    VBA의 모든 명령은 영어를 알면 어느 정도는 해석 할 수 있습니다. 지금 위의 코드는 값만 복사 해서 붙이는 과정 입니다. 그래서 Copy (복사) 와 PasteSpecial(선택하여 붙이기) 영어 단어가 보입니다.

     

    어떤 코드가 불 필요한지는 지금 아실 필요는 없습니다. Paste 뒤의 값들을 제거 해도 이 코드는 아무런 문제가 없습니다.

     

  3. 간단한 코드 작업, 모듈 합치기

    VBA코드를 하나도 이해 못해도 VBA코드의 구성 요소만으로 할 수 있는 작업은 꽤 유용한 것이 많습니다. 예를 들어 내가 만든 매크로는 모듈이라는 이름으로 저장되며 이 모듈을 통하여 VBA코드만 교환 할 수도 있습니다. 그런데 매크로는 생성될 때마다 별도의 모듈을 생성하는데 파일로 교환을 원한다면 하나의 모듈로 코드를 묶으면 되겠지요? 엑셀의 기본 환경에서는 불가능 하며 VBA에디터에서만 가능 합니다.

     

    먼저 시트 2를 만들어서 새로운 매크로를 매크로 통합 문서에 저장하여 보겠습니다.

     

     

    숫자 형식을 통화로 바꾸고 셀의 음영을 주는 매우 단순한 매크로 입니다.

     

     

    알트 + F11을 눌러서 VBA에디터에 와 보면 VBA Module 2코드가 추가된 것을 알 수 있습니다.

     

     

    모듈 이름을 변경 가능 합니다.

     

    모듈 이름은 한글로도 지정이 가능하지만 혹시나 모를 호환성 문제 때문에 항상 영문 이름을 지을 것을 권합니다. 한글은 어떤 프로그래밍 언어에도 공식적으로 지원하는 문자가 아니며 언젠가 문제점에 봉착하게 됩니다. 콩글리쉬를 쓰더라도 알파벳으로 모듈 이름을 정합시다.

     

    모듈 1에 값으로 저장이라는 매크로가 이미 있습니다. 그리고 잘못 생성된 매크로3도 모듈 1에 보이네요.

     

    이렇게 모듈 별로 매크로를 일부러 분리할 필요도 있지만 지금처럼 간단한 매크로들 이라면 하나의 모듈에 편하게 관리 하는 것이 좋겠죠. 단순히 잘라 내기, 붙여 넣기로 가능 합니다.

     

    모듈 1의 내용을 모듈 2로 붙여 넣어 보겠습니다. 코드 전체를 잘라 내기를 합니다.

     

     

    모듈 2의 코드 밑에 붙여 넣기를 하고 기존의 모듈 1은 마우스 우 클릭으로 Module제거를 선택하면 됩니다.

     

     

    이미 코드를 잘라 내기를 했으므로 저장할 필요도 없습니다. 아니요를 클릭 합니다.

     

     

    이제 두 개의 모듈이 하나의 모듈로 합쳐 졌습니다. 필자의 스타일로 영어로 ChangeValue란 모듈 이름을 정했습니다.

     

    엑셀의 VBA환경은 상당히 원시적 이므로 모듈 이름이나 나중에 변수 이름을 정할 때 자신의 원칙을 세워서 따르는 것이 대단히 중요합니다. 필자가 ChangeValue라고 지은 것은 매크로의 경우 띄어쓰기가 안되고 또 가장 국제적으로 널리 쓰이는 변수 지정 방법 중의 하나입니다. 단어의 첫 글자는 대문자로 그리고 띄어쓰기 없이 변수 이름을 정하게 되면 VBA뿐만 아니라 거의 모든 프로그램, 또는 파일 이름 등에서 항상 같은 스타일로 사용하실 수 있습니다.


+ Recent posts