-
[Excel] 엑셀 VBA 매크로 심화 실무용 완전 정복엑셀 2026. 6. 9. 10:52반응형
엑셀 VBA 매크로 심화 — 실무에서 바로 쓰는 자동화 코드 완전 정복

📋 목차
1. VBA란? — 매크로 녹화와 VBA의 차이
2. VBE 편집기 — 코드 작성 환경 이해하기
3. VBA 기본 문법 — 변수·조건문·반복문
4. 실전 코드 1 — 시트 자동 정리 & 서식 적용
5. 실전 코드 2 — 여러 시트 데이터 한 시트로 합치기
6. 실전 코드 3 — 조건에 맞는 행 자동 색칠 & 필터
7. 실전 코드 4 — 보고서 자동 생성 & PDF 저장
8. 오류 처리 & 디버깅 — 안전한 코드 만들기6편에서 매크로 기초를 배웠다. 이번 편은 그 다음 단계다. 녹화 매크로의 한계를 넘어서, 조건문과 반복문으로 정말 유용한 자동화 코드를 직접 작성하는 법을 다룬다.
코딩 경험이 없어도 괜찮다. 오늘 소개하는 코드들은 직접 복사해서 바로 쓸 수 있고, 주석으로 각 줄이 무엇을 하는지 설명해두었다.1 VBA란? — 매크로 녹화와 VBA의 차이 매크로 녹화는 내가 하는 동작을 그대로 기록한다. 편리하지만 한계가 있다 — 조건 분기(if~else)나 반복(for~next)을 표현할 수 없다. VBA를 직접 쓰면 이 모든 게 가능해진다.
구분 매크로 녹화 VBA 직접 작성 만드는 방법 동작을 클릭으로 기록 코드를 직접 입력 조건 분기 불가 If~ElseIf~End If 반복 처리 불가 For~Next, Do~Loop 오류 처리 불가 On Error GoTo 사용자 입력 불가 InputBox, MsgBox 유연성 고정된 동작만 데이터 양에 관계없이 동작 ▸ VBE 편집기 여는 법
방법 1: Alt + F11
방법 2: 개발 도구 탭 → Visual Basic
방법 3: 시트 탭 우클릭 → 코드 보기💡 개발 도구 탭이 없다면
파일 → 옵션 → 리본 사용자 지정 → 개발 도구 체크 → 확인2 VBE 편집기 구조 이해 영역 위치 역할 프로젝트 탐색기 왼쪽 상단 통합 문서·시트·모듈 목록 속성 창 왼쪽 하단 선택된 개체의 속성 코드 창 오른쪽 (메인) VBA 코드 작성 공간 직접 실행 창 하단 (Ctrl+G) 코드 테스트·변수값 확인 ▸ 모듈 삽입 — 코드 작성 위치
VBE에서: 삽입 메뉴 → 모듈
→ Module1 생성됨 → 여기에 Sub 프로시저 작성▸ 매크로 실행 방법
VBE에서: F5 (커서가 Sub 안에 있을 때)
엑셀에서: 개발 도구 → 매크로 → 실행
버튼 연결: 도형/버튼 삽입 → 우클릭 → 매크로 지정
단축키 지정: 개발 도구 → 매크로 → 옵션 → 단축키 설정3 VBA 기본 문법 — 변수·조건문·반복문 ▸ 변수 선언
Dim 변수명 As 형식
Dim i As Integer ' 정수
Dim name As String ' 텍스트
Dim price As Double ' 소수점 숫자
Dim flag As Boolean ' True/False
Dim ws As Worksheet ' 시트 개체▸ 조건문
If 조건 Then
' 참일 때 실행
ElseIf 다른조건 Then
' 다른 조건일 때
Else
' 모두 아닐 때
End If
' 예시: 달성률 판정
If rate >= 1 Then
result = "달성"
ElseIf rate >= 0.8 Then
result = "주의"
Else
result = "미달"
End If▸ 반복문
' For~Next: 횟수가 정해진 반복
For i = 1 To 10
Cells(i, 1).Value = i * 100
Next i
' For Each: 개체 컬렉션 순환
For Each ws In ThisWorkbook.Sheets
Debug.Print ws.Name
Next ws
' Do~Loop: 조건 기반 반복
Do While Cells(i, 1).Value <> ""
i = i + 1
Loop▸ 자주 쓰는 개체·속성
개체/속성 설명 예시 Cells(행, 열) 특정 셀 참조 Cells(2,3).Value = 100 Range("A1") 셀 주소로 참조 Range("B2:D10").Clear ActiveSheet 현재 시트 ActiveSheet.Name Sheets("이름") 시트 이름으로 참조 Sheets("1월").Activate LastRow 마지막 행 번호 Cells(Rows.Count,1).End(xlUp).Row MsgBox 메시지 상자 MsgBox "완료!" InputBox 입력 받기 name = InputBox("이름 입력:") 
4 실전 코드 1 — 시트 자동 정리 & 서식 적용 매달 받는 데이터 시트를 클릭 한 번으로 정리하는 매크로다. 헤더 굵게, 빈 행 삭제, 열 너비 자동 맞춤, 테두리 적용을 한 번에 처리한다.
Sub 시트자동정리()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' 1. 헤더 행 굵게 + 배경색
With ws.Rows(1)
.Font.Bold = True
.Interior.Color = RGB(33, 115, 70) ' 엑셀 초록
.Font.Color = RGB(255, 255, 255) ' 흰 글씨
End With
' 2. 전체 범위 테두리
With ws.Range(ws.Cells(1,1), ws.Cells(lastRow, lastCol)).Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
' 3. 열 너비 자동 맞춤
ws.Columns(1).Resize(, lastCol).AutoFit
' 4. 빈 행 삭제 (아래에서 위로)
Dim i As Long
For i = lastRow To 2 Step -1
If ws.Cells(i, 1).Value = "" Then
ws.Rows(i).Delete
End If
Next i
MsgBox "정리 완료! " & ActiveSheet.Name
End Sub💡 핵심 포인트
빈 행 삭제는 반드시 아래에서 위로(Step -1) 순환해야 한다. 위에서 아래로 삭제하면 행 번호가 밀려서 일부 행을 건너뛰게 된다.5 실전 코드 2 — 여러 시트 데이터 합치기 1월~12월 시트에 같은 형식의 데이터가 있을 때, '통합' 시트에 전부 모아주는 매크로다. 매달 수동으로 복사·붙이기 하던 작업을 코드 한 번으로 끝낸다.
Sub 시트합치기()
Dim ws As Worksheet
Dim masterWs As Worksheet
Dim lastRow As Long
Dim masterRow As Long
' 통합 시트 초기화 (없으면 생성)
On Error Resume Next
Set masterWs = ThisWorkbook.Sheets("통합")
On Error GoTo 0
If masterWs Is Nothing Then
ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = "통합"
Set masterWs = ThisWorkbook.Sheets("통합")
End If
masterWs.Cells.Clear
masterRow = 1
' 각 시트 순환 (통합 시트 제외)
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "통합" Then
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 첫 번째 시트만 헤더 복사
If masterRow = 1 Then
ws.Rows(1).Copy masterWs.Rows(masterRow)
masterRow = masterRow + 1
End If
' 데이터 행만 복사 (헤더 제외)
If lastRow > 1 Then
ws.Rows("2:" & lastRow).Copy masterWs.Rows(masterRow)
masterRow = masterRow + (lastRow - 1)
End If
End If
Next ws
MsgBox "합치기 완료! 총 " & masterRow - 1 & "행"
End Sub
6 실전 코드 3 — 조건부 자동 색칠 & 필터 달성률 열 값에 따라 행 전체를 자동으로 색칠하는 매크로다. 조건부 서식과 달리 실제 셀 색상으로 적용되어 인쇄에도 그대로 나온다.
Sub 달성률색칠()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim rate As Double
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow ' 헤더 제외, 2행부터
rate = ws.Cells(i, 5).Value ' E열: 달성률
' 기존 색상 초기화
ws.Rows(i).Interior.ColorIndex = xlNone
If rate >= 1 Then
ws.Rows(i).Interior.Color = RGB(198, 239, 206) ' 초록
ElseIf rate >= 0.8 Then
ws.Rows(i).Interior.Color = RGB(255, 235, 156) ' 노랑
Else
ws.Rows(i).Interior.Color = RGB(255, 199, 206) ' 빨강
End If
Next i
MsgBox "색칠 완료!"
End Sub💡 실무 팁
조건부 서식은 파일 공유 시 설정이 깨지는 경우가 있다. VBA로 실제 셀 색상을 적용하면 어떤 환경에서 열어도 색상이 유지된다.
RGB(198, 239, 206)은 엑셀 기본 초록 조건부 서식 색상이다. 기존 스타일과 통일하고 싶다면 이 값을 그대로 써라.7 실전 코드 4 — 보고서 자동 생성 & PDF 저장 매달 보고서 시트를 복사하고 날짜를 업데이트한 뒤 PDF로 저장하는 매크로다. 파일명에 날짜가 자동으로 들어간다.
Sub 보고서PDF저장()
Dim ws As Worksheet
Dim fileName As String
Dim savePath As String
Set ws = ThisWorkbook.Sheets("보고서")
' 파일명: 보고서_2025-05.pdf
fileName = "보고서_" & Format(Now, "YYYY-MM") & ".pdf"
savePath = ThisWorkbook.Path & "\" & fileName
' 인쇄 영역 설정 후 PDF 저장
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=savePath, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
OpenAfterPublish:=True ' 저장 후 자동으로 열기
MsgBox "저장 완료!" & Chr(10) & savePath
End Sub▸ 응용 — 담당자별 PDF 자동 저장
Sub 담당자별PDF()
Dim ws As Worksheet
Dim names As Variant
Dim name As Variant
Set ws = ActiveSheet
' 담당자 목록 (또는 UNIQUE 함수로 추출한 범위)
names = Array("김민준", "이서연", "박지호")
For Each name In names
' 자동 필터로 해당 담당자만 표시
ws.AutoFilterMode = False
ws.Range("A1").AutoFilter Field:=2, Criteria1:=name
' PDF 저장
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & name & "_보고서.pdf"
Next name
ws.AutoFilterMode = False ' 필터 해제
MsgBox "모든 담당자 PDF 저장 완료!"
End Sub
8 오류 처리 & 디버깅 — 안전한 코드 만들기 VBA 코드가 실행 중 오류를 만나면 갑자기 멈춘다. 오류 처리를 추가하면 오류가 나도 안전하게 처리하고 사용자에게 친절한 메시지를 보여줄 수 있다.
▸ On Error 문법
' 오류 무시 (위험 — 신중하게 사용)
On Error Resume Next
' 오류 발생 시 특정 레이블로 점프
On Error GoTo 오류처리
' 오류 처리 재개
On Error GoTo 0
' 실전 패턴:
Sub 안전한매크로()
On Error GoTo 오류처리
' 실제 코드...
Sheets("데이터").Activate
MsgBox "완료!"
Exit Sub ' 정상 종료
오류처리:
MsgBox "오류 발생: " & Err.Description
End Sub▸ 디버깅 방법
방법 설명 단축키 중단점 설정 특정 줄에서 실행 멈추기 F9 한 줄씩 실행 코드를 한 줄씩 실행하며 확인 F8 직접 실행 창 변수값·수식 즉시 확인 Ctrl+G 지역 창 모든 변수값 실시간 확인 보기 → 지역 창 Debug.Print 직접 실행 창에 값 출력 코드에 직접 삽입 ' Debug.Print 활용
For i = 1 To lastRow
Debug.Print "i=" & i & ", 값=" & Cells(i,1).Value
Next i
' → 직접 실행 창(Ctrl+G)에서 출력값 확인💡 실무 팁
VBA 코드 작성 전 항상 파일을 먼저 저장하자. 코드 오류로 엑셀이 강제 종료되면 저장하지 않은 작업이 날아간다.
중요한 데이터에 매크로를 실행하기 전에 파일을 복사해두는 습관을 들이자. 매크로는 Ctrl+Z로 되돌릴 수 없다.오늘 배운 내용 정리
코드/기능 핵심 문법 실무 활용 변수 선언 Dim 변수명 As 형식 Integer, String, Double, Worksheet 조건 분기 If~ElseIf~End If 달성률 판정, 상태 분류 반복 처리 For i=1 To N / For Each 전체 행 처리, 시트 순환 시트 정리 Bold, Interior.Color, AutoFit 매달 데이터 정리 자동화 시트 합치기 Rows.Copy, Sheets 순환 월별/지점별 파일 통합 PDF 저장 ExportAsFixedFormat 보고서 자동 저장 오류 처리 On Error GoTo 안전한 코드 패턴 VBA는 처음엔 어렵지만, 오늘 소개한 코드 패턴 4개만 익혀도 업무 자동화의 80%를 커버할 수 있다. 지금 당장 반복하는 작업 하나를 골라 코드로 만들어보자.
반응형'엑셀' 카테고리의 다른 글
[Excel] 엑셀 날짜 시간 함수 완전 정복 (0) 2026.06.10 [Excel] 엑셀 텍스트 함수 실전 활용 완전 정복 (0) 2026.06.09 [Excel] 엑셀 직장인이 실제로 가장 많이 묻는 엑셀 문제 완전 정복 (0) 2026.06.08 [Excel] 엑셀 반복 데이터 정리 파워 쿼리 완전 정복 (0) 2026.06.08 [Excel] 엑셀 파일 암호 · 셀 보호 · 개인정보 삭제 · 외부 공유 보안 완전 정복 (1) 2026.06.05