topic난이도 · 약 15

매크로 & VBA 심화

VBA 편집기 구성 요소, 기본 문법, 프로시저·함수·이벤트 구분.

#VBA#Sub#Function#매크로심화#제어문
왜 배우는가

필기 고난도 문항에서 VBA 코드 조각을 보여주고 결과를 묻는 문제가 출제된다. Sub/Function 구분, MsgBox 인수, 반복문 문법을 정확히 알아야 한다.

VBA(Visual Basic for Applications)는 엑셀 매크로의 내부 프로그래밍 언어다. 매크로 기록으로 생성된 코드를 수정하거나, 직접 코드를 작성하여 더 복잡한 자동화를 구현할 수 있다. Alt + F11로 VBA 편집기(VBE)를 연다.

VBA 편집기 — Sub/Function 프로시저를 작성해 엑셀을 프로그래밍으로 제어하는 구조
용어정의
VBEVisual Basic Editor — VBA 코드를 작성·편집하는 환경
모듈(Module)VBA 코드를 저장하는 단위. Sub/Function 프로시저 포함
Sub 프로시저반환값 없이 작업을 수행하는 명령 블록
Function 프로시저값을 반환하는 함수 (워크시트 수식에서도 호출 가능)
이벤트 프로시저특정 동작(클릭, 열기 등) 발생 시 자동 실행되는 코드
MsgBox메시지 상자를 표시하는 함수 (버튼·아이콘 지정 가능)
InputBox사용자 입력을 받는 대화상자 함수
Range 객체셀 또는 셀 범위를 나타내는 VBA 객체
Cells(행, 열)행 번호와 열 번호로 셀을 참조하는 속성

Sub vs Function — Sub는 반환값이 없고 매크로로 직접 실행할 수 있다. Function은 반환값이 있고 워크시트 수식(=함수명())에서도 호출 가능하다. 필기에서 이 차이를 묻는 문제가 매우 빈출한다.

VBA 제어문문법용도
If~Then~ElseIf 조건 Then ... Else ... End If조건 분기
Select CaseSelect Case 변수 ... Case 값 ... End Select다중 조건 분기
For~NextFor i = 1 To 10 ... Next i횟수 지정 반복
For Each~NextFor Each obj In 컬렉션 ... Next컬렉션 순회
Do While~LoopDo While 조건 ... Loop조건 만족 시 반복
Do~Loop UntilDo ... Loop Until 조건최소 1회 실행 후 조건 검사

기출 코드 읽기 팁 — 필기에서 자주 나오는 패턴: `Sub 계산() / Dim i As Integer / For i = 1 To 5 / Cells(i, 1).Value = i * 10 / Next i / End Sub` → A1:A5에 10, 20, 30, 40, 50이 입력된다. Cells(행, 열) 순서와 For 루프 범위를 정확히 추적하는 것이 핵심이다.

vb
' [예시 1] 단순 셀 입력 — 매크로 기록으로 자동 생성되는 코드
Sub 제목입력()
    Range("A1").Value = "부서별 매출 보고서"
    Range("A1").Font.Bold = True
    Range("A1").Font.Size = 14
End Sub

' [예시 2] For 반복문 — A1:A10에 1~10 입력
Sub 일련번호()
    Dim i As Integer
    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
End Sub

' [예시 3] If 분기 — B열 점수에 따라 C열에 등급 표시
Sub 등급판정()
    Dim r As Integer
    For r = 2 To 11
        If Cells(r, 2).Value >= 90 Then
            Cells(r, 3).Value = "A"
        ElseIf Cells(r, 2).Value >= 80 Then
            Cells(r, 3).Value = "B"
        Else
            Cells(r, 3).Value = "C"
        End If
    Next r
End Sub

3가지 패턴 암기 — ① 단순 속성 지정 (`.Value`, `.Font.Bold`) ② For 루프 + Cells(i, j)If~ElseIf~Else 분기. 실기 VBA 문제의 90%가 이 3패턴 조합이다.