엑셀 VBA #3. 매크로로 작성된 VBA 코드로 프로그래밍 하는 방법
Lucy Archive
Lucy 2023
2020. 12. 9. 15:27

Excel VBA 프로그래밍 언어 공부보다 중요한 매크로 사용법

지난 포스트에서 엑셀 VBA 및 매크로를 사용하기 위한 환경설정에 대해 소개하였습니다. 이번 포스트는 본격적으로 VBA 사용 방법에 앞서

매크로를 이용한 VBA 코드 작성법에 대해 소개

합니다. 저는 이 포스트의 방법이 있어서, Excel VBA가 어느 자동화 툴보다 괜찮은 도구라고 생각합니다.

지난 글

 

엑셀 VBA #2. 매크로, VBA 사용을 위한 환경 설정 및 개발도구 탭 추가

Excel VBA 사용 환경 설정 및 개발도구 탭 추가 지난 포스트의 Excel VBA 소개에 이어서, 이번 포스트는 Excel VBA를 시작하기 위해 필요한 환경 설정과 프로그램 개발을 위한 개발도구 탭 추가하는 방법

juahnpop.tistory.com

사전안내사항

※ 이 포스트는 엑셀 매크로 사용법이 아닌, VBA 코드를 작성하는데 도움이 되는 매크로 사용법을 설명합니다.


매크로(Macro)란?

매크로(Macro) 기능은 정해진 순서에 따라 동작하도록 정의된 규칙을 말하고, 정해진 순서대로 동작하는 프로그램을 매크로 프로그램이라고 말합니다. 수강신청, 콘서트 티켓과 같이 부적절한 사용 때문에 매크로란 단어가 부정적인 이미지가 있지만, 본래의 목적은 작업에 투입되는 리소스와 오류를 줄이기 위해 사용됩니다.

엑셀 메크로 사용해보기

지난 포스트의 설명처럼 엑셀 리본 메뉴 개발 도구 탭을 활성화하면 매크로 기능을 사용할 수 있습니다. (포스트 작성하면서 보니, 기본 엑셀 보기 탭에서 있었네요.. 왜 이제 알았지..) 

매크로 사용 예시로, 아래와 같은 표 서식을 적용하는 매크로를 만들어 보겠습니다. 왼쪽은 표 서식이 없는 표 3개이고, 오른쪽은 표 서식이 적용된 같은 표 3개입니다.

매크로 사용으로 표서식

매크로 녹화는 표 2만 사용하고, 작성된 매크로를 사용하여 표 1, 표 3에 적용하여 표 서식을 바꾸도록 하겠습니다. 이와 같이 매크로를 작성하기 위해 표에 적용된 서식을 유심히 보면 2구역으로 나눌 수 있습니다. 번거롭지만 매크로를 2개 작성하면 표 서식을 적용할 수 있습니다.

  • 구역 1 : 첫 줄
    • 노란색 음영
    • 아래쪽 이중 테두리
  • 구역 2 : 전체
    • 전체 태두리 적용
    • 오른쪽, 아래쪽 굵은 태두리

구역 1 매크로 만들기

아래와 같이 매크로 기록을 시작합니다.

  • D4~D5셀을 선택
  • 매크로 기록 버튼을 누르기
  • 매크로 기록 창에서 바로가기와 설명을 입력 - ※ 필수사항 아님
  • 매크로 기록 창에서 확인 버튼 클릭

매크로 기록 시작하기

매크로 기록 창에서 확인 버튼을 누르면 메크로 녹화가 진행됩니다. 지금부터는 엑셀에서 하는 모든 이벤트가 '매크로 1'이름의 매크로에 모두 기록됩니다. 아래와 같이 표 서식을 입력합니다. 그림의 번호대로 진행하시면 됩니다.

📌 D4~D5셀 선택 > 마우스 우클릭 > 셀 서식 > 태두리 탭 선택

📌 태두리 탭에서 표 서식 적용하기

표 서식 적용하기

적용이 완료되면 기록 중지 버튼을 버튼을 클릭하여 녹화를 마칩니다. 첫 행 매크로 녹화가 완료되었습니다.

기록 중지

구역 2 매크로 만들기

아래의 순서로 새로운 매크로를 생성하고 녹화를 진행합니다.

  • (중요) D5 ~ E7 셀을 선택
  • 매크로 기록 버튼을 누르기
  • 매크로 기록 창에서 바로가기와 설명을 입력 - ※ 필수사항 아님
  • 매크로 기록 창에서 확인 버튼 클릭

본문 서식 지정 매크로 기록 시작

본문 영억의 표 서식을 아래와 같이 지정합니다. 표 서식은 아래 그림의 번호 순서대로 하시면 됩니다.

📌 D5 ~ E7 셀 선택 > 마우스 우클릭 > 셀 서식 > 태두리 탭 선택

📌 태두리 탭에서 표 서식 적용하기

구역2 표서식 지정

적용이 완료되면 기록 중지 버튼을 버튼을 클릭하여 녹화를 마칩니다. 구역 2의 매크로 녹화가 완료되었습니다.

기록 중지

매크로 적용하기

매크로 적용은 구역 2부터 진행 후 구역 1을 진행합니다. 표 1의 첫행 선택 후 위에서 단축키로 지정한 Ctrl + q 를 누르면 첫행 서식이 적용됩니다. 표 3의 첫 행도 동일하게 Ctrl + q로 실행합니다.

구역2 범위 지정후 Ctrl+q 로 서식 지정

나머지 표 1의 첫행, 표 3의 첫 행을 선택하여 위의 매크로에서 지정한 단축키 Ctrl + r 로 첫 행의 서식을 지정합니다.

구역1 범위 선택 후 Ctrl+r 로 서식 지정

매크로의 한계점과 VBA

위의 하나 예시로 말씀드리긴 어렵지만, 매크로만 사용해서 완전한 자동화를 만들기는 어렵습니다. 위의 간단한 표 서식을 적용하는 것만 봐도, 이런 매크로 작성 방식으로는 제목이 2둘이거나, 왼쪽 1줄도 강조를 주어야 하는 표 서식을 만들기는 힘듭니다. 제가 느끼는 매크로의 한계점은 아래와 같습니다.

  • 변수가 있는 상황에 대처하기 어렵다.
  • 변수를 대처하기 위해 순서와 시나리오를 아주 잘 작성해야 한다.
  • 위의 시나리오를 잘 작성해도 매크로 1회 실행으로 자동화 하기는 어렵다.

위의 한계점 때문에 표 서식을 만드는 매크로는 구역을 2개로 나누고, 표2를 사용해서 메크로 기록을 하였습니다. 생성되 매크로를 적용할 때에도 내용을 먼저 하고 첫행을 나중에 했습니다. 이런 한계는 VBA를 사용해서 해결 될 수 있습니다.

 

매크로와 VBA

VBA로 위와 같은 표서식을 만드는 매크로를 만들면 아래의 논리적인 순서로 만들 수 있습니다.

  • 표 전체를 선택한 상태에서 시작
  • 표 전체 내부/외부 일반 테두리 지정
  • 표 전체 오른쪽, 아래 굵은 테두리 지정
  • 표의 첫 행을 알아서 선택해서 노란색으로 지정 후 아래쪽에 이중 테두리 지정

VBA는 VIsual Basic 언어로 Excel을 위한 부가기능을 만들 수 있는 장치라고 말할 수 있습니다. 그렇다면 위의 4가지를 수행하기 위해 어떤 코드를 작성해야 하는지 알아야 합니다. 테두리 설정, 배경색 설정하는 코드를 알기 위해 검색사이트에서 검색할 수 있지만, 엑셀 매크로를 사용하면 이벤트가 VBA코드로 기록됩니다. 위에서 작성한 매크로의 VBA코드를 보기 위해서 Alt + F11 로 VBA Editor 창을 열어 확인할 수 있습니다. 에디터 창을 열면 sub 매크로 1() 내에 아래 그림과 같은 코드를 볼 수 있습니다.

매크로1의 코드

위의 에디터 창에서 Sub 매크로1() 함수 내에 마우스를 클릭하여 커서를 두고, 엑셀 화면에서 아무 영역을 그래드 하고, 에디터에서 코드 실행을 누르면 매크로 1이 실행되는 것을 확인할 수 있습니다.

에디터에서 매크로 실행하기

매크로를 사용하여 VBA 코드 작성

위의 매크로 작성에서 매크로 1과 매크로2의 기능을 정리하면 아래와 같습니다.

  • 매크로1 : 표 첫행 서식 지정
  • 매크로 2 : 표 본문 내용 서식 지정

위의 매크로를 사용하여 아래와 같은 코드를 새로 생성합니다. 기존 매크로를 사용하면서 Selection.Rows(1).Select 코드를 추가하였습니다. 이 코드의 의미는 현재 선택된 코드에서 첫 번째 줄을 선택하는 코드입니다. 코드의 의미는 이후 포스트에서 차차 설명할 예정입니다. 

Sub MyTableForm()
    Call 매크로2
    Selection.Rows(1).Select
    Call 매크로1
End Sub

에디터 창에서 제일 아래에 코드를 작성하시면 됩니다.

VBA 에디터에서 코드 작성

VBA 코드 실행

엑셀에서 매크로 또는 VBA를 실행하는 방법은 아주 다양한데, 버튼을 누르는 방식을 사용해서 실행해보겠습니다. 아래 gif와 같이 도형을 생성하고, 도형에 MyTableForm 메크로를 지정합니다. 이 버튼을 누르면 MyTableForm 매크로가 실행됩니다.

표 서식을 지정할 범위를 선택하고, 표 서식 실행 도형을 누르면 매크로가 실행됩니다.

VBA 코드 실행


마무리

이번 포스트에서 간략하게 매크로 사용법을 알아보고, 기록된 매크로를 사용하여 내가 원하는 기능을 구현하는 예시를 소개드렸습니다. 본문의 표 서식을 만드는 방법은 엑셀 VBA를 사용하지 않더라도, 엑셀의 스타일을 사용하면 되지만 예시로서 보여드렸습니다. 이후 포스트에서 찾아뵙겠습니다.

끝까지 봐주셔서 감사합니다.^^

관련포스트

👉 엑셀 VBA 강좌 관련글 목록 보기