VBA 프로그래밍 기초
쉽게 말하면
VBA는 엑셀에게 일을 시키는 프로그래밍 언어예요. 매크로를 기록하면 엑셀이 VBA 코드를 대신 적어 주고, Alt+F11로 편집기를 열면 그 코드를 직접 고칠 수 있어요. 코드는 '무엇을(개체) 어떻게(속성·메서드)' 순서로 써요. Range("A1").Value = 10은 'A1 셀의 값을 10으로'라는 뜻이에요.
시험용 정의
VBA(Visual Basic for Applications)는 오피스 프로그램을 제어하는 언어로, Visual Basic Editor(Alt+F11)에서 프로젝트 탐색기·속성 창·코드 창을 쓰고 코드는 모듈에 저장한다. 코드 안에 커서를 두고 F5를 누르면 실행, F8은 한 줄씩 실행한다. Sub 이름() ~ End Sub는 값을 돌려주지 않는 프로시저, Function 이름() ~ End Function은 값을 돌려주는 프로시저다. 코드는 개체.속성 = 값, 개체.메서드 모양으로 쓴다. 셀은 Range("A1")·Cells(행, 열)·ActiveCell로, 열은 Columns(1)·Range("A:A"), 행은 Rows(1)·Range("1:1")로 가리킨다. 통합 문서는 Workbooks(Open·Close·Add), 활성 문서는 ActiveWorkbook(Save·Close), 엑셀 전체는 Application(Quit)이다. MsgBox(메시지, 단추+아이콘, 제목)는 단추를 누른 결과를 값으로 돌려준다. 반복은 For i = 1 To 10 ~ Next, Do While 조건 ~ Loop, 조건은 If ~ Then ~ Else ~ End If다. 워크시트 이벤트(Worksheet_Change·Worksheet_SelectionChange)에 쓴 코드는 그 시트에서만 동작한다.
비유로 이해하기
VBA 문장은 '주어.동사' 짧은 명령문이다. Range("A1")(주어) .ClearFormats(동사)는 'A1아, 서식을 지워라'는 뜻이고, .Value = 10은 'A1아, 네 값은 10이다'라는 뜻이다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 개체(Object) | 셀·시트·통합 문서처럼 다룰 대상 |
| 속성(Property) | 개체의 성질. Value(값), Font.Bold(굵게), Interior.ColorIndex(채우기 색) |
| 메서드(Method) | 개체가 하는 동작. Select, Copy, Clear, Close |
| 프로시저 | Sub나 Function으로 묶은 코드 한 덩어리 |
| 이벤트 | 셀을 바꾸거나 선택하는 등 어떤 일이 일어났을 때 자동으로 실행되는 코드의 계기 |
자주 나오는 코드
| 코드 | 뜻 |
|---|---|
| Range("B2").Value = 100 | B2에 100 입력 |
| Cells(2, 3).Value | 2행 3열 = C2의 값 |
| Columns("A").Font.Bold = True | A열 글꼴 굵게 (Range("A:A")·Columns(1)도 같다) |
| Rows(1).RowHeight = 20 | 1행 높이 |
| Range("A1:C3").ClearContents / ClearFormats / Clear | 내용만 / 서식만 / 모두 지우기 |
| ActiveCell.Offset(1, 0).Select | 현재 셀 한 칸 아래 선택 |
| ActiveWorkbook.Close | 활성 통합 문서만 닫기 |
| Workbooks.Close | 열린 통합 문서를 모두 닫기 (엑셀은 계속 실행) |
| Application.Quit | 엑셀 종료 |
MsgBox 단추와 아이콘
| 상수 | 모양 |
|---|---|
| vbOKOnly / vbOKCancel | 확인 / 확인·취소 |
| vbYesNo / vbYesNoCancel | 예·아니요 / 예·아니요·취소 (취소가 있으면 Esc = 취소) |
| vbQuestion | 물음표 아이콘 |
| vbInformation | 정보(i) 아이콘 |
| vbExclamation / vbCritical | 느낌표 / 빨간 X 아이콘 |
반복문 읽기
Sub 합계()
Dim i As Integer, s As Integer
For i = 1 To 4
s = s + i
Next i
Range("A1").Value = s ' 1+2+3+4 = 10
End SubFor 문이 끝나면 i 는 마지막 값보다 하나 큰 5가 된다. 문제에서 반복 뒤 변수 값을 물으면 이 점을 챙긴다.
1급에서 더 나오는 것
| 항목 | 알아 둘 것 |
|---|---|
| 개체 다루기 | Range("A1:C3").ClearFormats 서식만, .ClearContents 내용만, .Clear 모두 지우기. Columns("A")·Columns(1)·Range("A:A")는 A열, Rows(1)은 1행. ActiveWorkbook.Close 지금 통합 문서만 닫기, Application.Quit Excel 끝내기 |
| 메시지 상자 | MsgBox "내용", vbYesNoCancel + vbQuestion, "제목": 예·아니요·취소 단추, 물음표 아이콘(정보 아이콘은 vbInformation), Esc는 취소 |
| 이벤트와 반복 | 시트 모듈의 Worksheet_Change는 값이 바뀔 때, Worksheet_SelectionChange는 선택이 바뀔 때 실행. For i = 1 To 10 Step 3은 1, 4, 7, 10으로 돌고 끝나면 i는 13. F8은 한 줄씩 실행 |
시험에 이렇게 나와요
- VBE → Alt+F11, F5 실행, F8 한 단계씩, 프로젝트 탐색기·속성 창·코드 창
- A열 → Range("A:A")·Columns(1)·Columns("A"), 1행 → Range("1:1")·Rows(1)
- ClearFormats(서식만)·ClearContents(내용만)·Clear(모두)
- MsgBox → vbQuestion 물음표, vbInformation 정보 아이콘, 취소 단추가 있으면 Esc는 취소
- Workbooks.Close(문서 닫기)·Application.Quit(엑셀 종료)
- For~Next·Do 반복 뒤 변수 값, 워크시트 이벤트 코드는 그 시트에서만 동작
- (1급) ClearFormats·Columns·Rows, MsgBox 단추·아이콘 상수, Worksheet_Change, ActiveWorkbook.Close 대 Application.Quit, For 반복 후 변수 값
확인 문제
Q1. VBA에서 [A1:C3] 영역의 서식만 지우는 코드는?
- Range("A1:C3").ClearFormats
- Range("A1:C3").Delete
- Range("A1:C3").ClearContents
- Range("A1:C3").FreeFormats
정답 보기
1번 Range("A1:C3").ClearFormats
ClearFormats는 서식만, ClearContents는 내용만, Clear는 모두 지운다. Delete는 셀 자체를 삭제한다.
Q2. VBA에서 2행 3열 셀을 가리키는 것은?
- Cells(2, 3)
- Cells(3, 2)
- Rows(2).Columns(3)
- Range("B3")
정답 보기
1번 Cells(2, 3)
Cells(행, 열). 2행 3열은 C2다.
Q3. 다음 중 B열을 가리키지 않는 것은?
- Range("2:2")
- Columns("B")
- Columns(2)
- Range("B:B")
정답 보기
1번 Range("2:2")
Range("2:2")는 2행이다.
Q4. MsgBox "저장할까요?", vbYesNo + vbQuestion 이 표시하는 것은?
- 확인·취소 단추만
- 확인 단추와 정보 아이콘
- 예·아니요·취소 단추와 경고 아이콘
- 예·아니요 단추와 물음표 아이콘
정답 보기
4번 예·아니요 단추와 물음표 아이콘
vbYesNo는 예·아니요, vbQuestion은 물음표 아이콘이다.
Q5. 엑셀은 켜 둔 채 열린 통합 문서를 닫는 코드는?
- ActiveCell.Close
- Worksheets.Quit
- Application.Quit
- Workbooks.Close
정답 보기
4번 Workbooks.Close
Application.Quit은 엑셀 자체를 종료한다.
Q6. Visual Basic Editor에서 코드를 한 줄씩 실행하는 키는?
- F5
- F2
- F8
- F11
정답 보기
3번 F8
F5는 전체 실행, F8은 한 단계씩 실행이다.
헷갈리기 쉬운 O·X
Sub 프로시저는 계산 결과를 호출한 곳에 돌려준다.
정답 보기
X 값을 돌려주는 것은 Function 프로시저다.
워크시트 이벤트(Worksheet_Change)에 쓴 코드는 모든 시트에서 동작한다.
정답 보기
X 코드를 쓴 그 시트에서만 동작한다.
Visual Basic Editor에서는 매크로를 한 단계씩 실행할 수 없다.
정답 보기
X F8로 한 줄씩 실행할 수 있다.