topic★★★★★난이도 · 약 15분
매크로 & VBA 심화
VBA 편집기 구성 요소, 기본 문법, 프로시저·함수·이벤트 구분.
#VBA#Sub#Function#매크로심화#제어문
왜 배우는가
필기 고난도 문항에서 VBA 코드 조각을 보여주고 결과를 묻는 문제가 출제된다. Sub/Function 구분, MsgBox 인수, 반복문 문법을 정확히 알아야 한다.
VBA(Visual Basic for Applications)는 엑셀 매크로의 내부 프로그래밍 언어다. 매크로 기록으로 생성된 코드를 수정하거나, 직접 코드를 작성하여 더 복잡한 자동화를 구현할 수 있다. Alt + F11로 VBA 편집기(VBE)를 연다.
| 용어 | 정의 |
|---|---|
| VBE | Visual Basic Editor — VBA 코드를 작성·편집하는 환경 |
| 모듈(Module) | VBA 코드를 저장하는 단위. Sub/Function 프로시저 포함 |
| Sub 프로시저 | 반환값 없이 작업을 수행하는 명령 블록 |
| Function 프로시저 | 값을 반환하는 함수 (워크시트 수식에서도 호출 가능) |
| 이벤트 프로시저 | 특정 동작(클릭, 열기 등) 발생 시 자동 실행되는 코드 |
| MsgBox | 메시지 상자를 표시하는 함수 (버튼·아이콘 지정 가능) |
| InputBox | 사용자 입력을 받는 대화상자 함수 |
| Range 객체 | 셀 또는 셀 범위를 나타내는 VBA 객체 |
| Cells(행, 열) | 행 번호와 열 번호로 셀을 참조하는 속성 |
Sub vs Function — Sub는 반환값이 없고 매크로로 직접 실행할 수 있다. Function은 반환값이 있고 워크시트 수식(=함수명())에서도 호출 가능하다. 필기에서 이 차이를 묻는 문제가 매우 빈출한다.
| VBA 제어문 | 문법 | 용도 |
|---|---|---|
| If~Then~Else | If 조건 Then ... Else ... End If | 조건 분기 |
| Select Case | Select Case 변수 ... Case 값 ... End Select | 다중 조건 분기 |
| For~Next | For i = 1 To 10 ... Next i | 횟수 지정 반복 |
| For Each~Next | For Each obj In 컬렉션 ... Next | 컬렉션 순회 |
| Do While~Loop | Do While 조건 ... Loop | 조건 만족 시 반복 |
| Do~Loop Until | Do ... 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 Sub3가지 패턴 암기 — ① 단순 속성 지정 (`.Value`, `.Font.Bold`) ② For 루프 + Cells(i, j) ③ If~ElseIf~Else 분기. 실기 VBA 문제의 90%가 이 3패턴 조합이다.