• 최초 작성일: 2000-04-27
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 코드창에서 작업하기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

여러분들이 VBA에 능수능란해 질수록 점점 더 많은 시간을 오늘 설명드릴 코드창 (Code Window)에서 시간을 보내시게 될 것입니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

코드창에서 작업하기

핵심 요약: 코드창 작업과 매크로 기록

코드는 직접 입력, 매크로 기록, 복사의 세 가지 방법으로 만들 수 있으며, 매크로 기록 결과는 필요한 부분만 남기도록 수정할 수 있어야 합니다.

  • 코드창 구성: Sub, Function, 선언, Property 프로시저
  • 실행: F5, [실행-Sub/사용자 정의 폼 실행], 실행 버튼
  • 매크로 기록: 필요 없는 코드까지 기록되므로 수정이 필요합니다.
  • 한계: MsgBox, InputBox, 변수 지정 등은 기록되지 않습니다.

Step 1: VBA 코드창 안에 포함되는 것들

VBA 코드창 안에는 다음의 네가지가 포함되어 질 수 있습니다. (1) 서브 프로시저(Sub Procedure): 프로시저라는 것은 어떤 동작을 수행하는 명령들의 집합체 입니다.

(2) 펑션 프로시저(Function Procedure): 펑션이라는 것은 어떤 동작을 수행(←여기까지는 프로시저와 동일)하고 그 결과값(또는 배열)을 돌려주는(즉 리턴시켜 주는) 명령들의 집합체입니다. 언뜻 이해가 되지 않지요? Sum 함수를 생각해 보세요. 특정 범위를 합계한 다음 그 결과값을 화면상에 돌려주지 않습니까.

(3) (변수)선언(Declarations): 변수에 대해서는 이미 설명을 드렸고... 변수의 타입 등에 대한 정보를 지정해 줍니다.

(4) 프로퍼티 프로시저(Property Procedure): 프로퍼티는 보통 "속성"이라고 번역이 됩니다. 이 프로퍼티 프로시저는 "클래스 모듈"이라는 좀 특별한 모듈에서 사용되는 좀 특수한 것입니다.

파일안에는 여러 개의 모듈을 삽입할 수 있습니다. 하나의 모듈안에 여러 개의 프로시저를 넣어둘 것인지 아니면 몇 개의 모듈에다 분산해서 넣어둘 것인지는 사용자 마음입니다.

Step 2: VBA 코드 입력해 보기

VBA 모듈에 코드를 삽입하는 데는 다음의 세가지 방법이 있습니다.

  1. 가장 전통적인(?) 방법: 키보드로 그냥 입력하는 방법
  2. 매크로 기록기능을 사용하는 방법: 매크로 기록기를 사용해서 코드를 만든 다음 그것을 수정하여 사용하는 방법
  3. 복사하기: 다른 모듈에서 "복사-붙여넣기" 해서 사용하는 방법

Exceller의 경우에는 (1)을 위주로 하되 (2)와 (3)의 방법을 병행해서 쓰고 있습니다. 대개가 그러할 것입니다. 자, 이제 직접 실습해 보도록 하지요.

(1) 코드 입력하기

(1) 지난 시간에 배우신 대로 프로젝트를 하나 만들고(즉 파일을 하나 만들고) 모듈시트를 한 장 삽입합니다. 그리고 나서 아래의 코드를 가장 전통적인 방법, 즉 키보드를 이용하여 모듈시트 내에 그대로 입력합니다(백문이 불여일견, 백견이 불여일打지요?).

모듈시트에 입력한 안녕하세요 프로시저 코드
아이엑셀러
Sub 안녕하세요()
    Dim Msg As String
    Dim Answer As Integer

    Msg = Application.UserName & "님 안녕하세요?"
    Answer = MsgBox(Msg, vbYesNo)
    If Answer = vbNo Then
        MsgBox "저런, 무슨 일이 있나요?"
    Else
        MsgBox "안녕하시다니 다행이네요."
    End If
End Sub

(2) 실행하기

(2) 입력이 끝났으면 실행을 시켜 보아야 겠지요? 실행을 시키는 데는 세 가지 방법이 있습니다.

  1. 코드 내에 마우스 포인터를 위치시킨 다음에 F5 키를 누르거나,
  2. "실행-Sub/사용자 정의 폼 실행" 메뉴를 선택하거나,
  3. 도구모음에 있는 실행 버튼을 눌러주면 됩니다.
도구모음의 실행 버튼
아이엑셀러

아마 아래와 같은 메시지박스가 나타날 것입니다.

프로시저 실행 결과 나타나는 메시지 박스
아이엑셀러

(3) 코드 살펴보기

코드를 살펴볼까요?

    Dim Msg As String
    Dim Answer As Integer

문자열 변수 Msg와, 메시지박스의 결과값을 담을 변수 Answer를 선언해 주었습니다.

    Msg = Application.UserName & "님 안녕하세요?"
    Answer = MsgBox(Msg, vbYesNo)

Application.UserName이라는 것은 현재의 어플리케이션 프로그램(여기서는 엑셀이 되겠지요?)의 사용자명을 알아내는 명령어 입니다. 그런 다음 &연산자를 써서 두개의 문자열을 합쳐서 Msg라는 문자열 변수에 그 값을 저장해 주었네요. 그 다음에 Answer라는 변수에는 메시지박스의 결과값(Yes/No)을 저장하였습니다.

    If Answer = vbNo Then
        MsgBox "저런, 무슨 일이 있나요?"
    Else
        MsgBox "안녕하시다니 다행이네요."
    End If

Answer변수의 값이 vbNo이면 "저런…" 메시지를, 그렇지 않다면 "안녕하시다니…" 하는 메시지박스를 화면상에 나타내는 것입니다.

Step 3: 매크로 기록기능 사용하기

그러면 이번에는 매크로 기록기를 사용하여 코드를 작성해 볼까요?

  1. 아무 워크시트나 하나 선택합니다(현재 시트도 물론 괜찮지요).
  2. "도구-매크로-새 매크로 기록" 메뉴를 선택합니다.
  3. "매크로 기록" 대화상자가 나타나는데 그냥 "OK"를 선택합니다.
  4. 이제부터의 모든 동작이 코드로 기록이 되므로 쓸데없는 것을 누르지 않도록 각별히 주의하시고... "파일-페이지 설정" 메뉴를 클릭합니다.
  5. "용지 방향-가로"를 선택하고 "확인"을 누릅니다.
  6. "기록 중지" 버튼을 누릅니다.(또는 "도구-매크로-매크로 기록 중지" 메뉴를 선택해도 됩니다).
매크로 기록 중지 버튼
아이엑셀러

참고: 최근 버전의 Excel에서는 [개발 도구] 탭의 [매크로 기록]/[기록 중지]를 사용하고, 페이지 설정은 [페이지 레이아웃] 탭에서 합니다. 기록되는 코드도 위 예제보다 짧아진 경우가 많고, PageSetup 관련 코드는 프린터 드라이버와 통신하느라 실행이 느릴 수 있습니다.

이제 기록된 매크로를 살펴 볼까요? VBE 창으로 갑니다(Alt + F11키를 눌러 보세요) 가서 Module1를 더블클릭하여 내용을 살펴보세요(만약 Module1이 이미 있다면 Module2에 기록이 되어있을 것입니다).

Sub Macro1()
'
' Macro1 Macro
' 권현욱이(가) 2000-04-23에 기록한 매크로
'

'
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.75)
        .RightMargin = Application.InchesToPoints(0.75)
        .TopMargin = Application.InchesToPoints(1)
        .BottomMargin = Application.InchesToPoints(1)
        .HeaderMargin = Application.InchesToPoints(0.5)
        .FooterMargin = Application.InchesToPoints(0.5)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
    End With
End Sub

놀라지 않으셨는지? 분명 우리가 해준 거라고는 "파일-페이지 설정"으로가서 "가로방향 인쇄"를 선택한 것 밖에 없는데 이렇게 많은 코드가 저절로 작성이 되어 있다니 말입니다!

그런데 정작 우리가 필요한 것은 위에서 노란색으로 표시한 부분입니다. 그 이외 라인은 삭제하셔도 됩니다. 즉 아래와 같이 축약을 해도 된다는 것이지요.

Sub Macro1()
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
    End With
End Sub

매크로 기록 기능은 분명히 필요한 기능이긴 하지만 이처럼 불필요한 요소까지 모두 기록으로 남겨두기 때문에 융통성이 전혀 없으며, 또한 매크로 기록 기능으로 모든 것을 해결할 수는 없습니다.

위의 코드는 또 아래와 같이 더 축약할 수도 있습니다.

Sub Macro1()
    ActiveSheet.PageSetup.Orientation = xlLandscape
End Sub

여기서 Orientation을 속성(Property)이라고 부릅니다. 즉 속성이라는 것은 오브젝트(개체)가 가진 특징이나 성격을 가리키는 것입니다. 또한 xlLandscape는 내장변수(이미 만들어져 있는 변수)라고 부릅니다. 복잡하지요? 으~~~ 속성, 개체, 내장변수…

정리

이쯤에서 오늘 강좌를 요약을 해 볼까요?

매크로 기록 기능을 적극 활용하도록 하십시오. 그러나 그 결과를 보고 코드를 수정할 수는 있어야 합니다. 위의 예에서와 같이 불필요한 요소들이 많이 포함될뿐만 아니라 매크로 기록 기능으로는 MsgBox, InputBox, 변수 지정 등과 같은 기능은 수행할 수가 없습니다.

가끔 코딩을 하다 보면 프로퍼티(속성)나 Method(방법) 등이 생각나지 않을 때가 자주 있습니다. 이럴 경우에 매크로 기록 기능은 아주 유용하게 쓰입니다.

마무리

오늘은 여기까지…

정리 — 코드창 작업 요약

구분 설명 예시
Sub 프로시저 동작을 수행하는 명령의 집합 Sub 안녕하세요()
Function 프로시저 동작 수행 후 결과값을 돌려줌 Sum 함수와 유사
입력 방법 직접 입력, 매크로 기록, 복사 ―
축약 결과 ActiveSheet.PageSetup.Orientation = xlLandscape 용지 방향을 가로로

자주 묻는 질문 (FAQ)

Q1. Sub 프로시저와 Function 프로시저는 무엇이 다른가요?

둘 다 동작을 수행하지만, Function 프로시저는 그 결과값(또는 배열)을 돌려줍니다.

Q2. 코드는 어떻게 실행하나요?

코드 안에 커서를 두고 F5 키를 누르거나, [실행-Sub/사용자 정의 폼 실행] 메뉴 또는 도구모음의 실행 버튼을 사용합니다.

Q3. 매크로 기록 기능만으로 충분한가요?

아닙니다. 불필요한 코드가 많이 기록되고 MsgBox, InputBox, 변수 지정 같은 기능은 기록되지 않으므로 코드를 수정할 수 있어야 합니다.

마치며

매크로 기록 기능은 프로퍼티나 메서드가 생각나지 않을 때 아주 유용하게 쓰이므로 적극 활용하시기 바랍니다.