매크로란 무엇인가
엑셀 매크로(Macro)는 반복되는 업무를 자동화하는 기능입니다. 엑셀 내부의 VBA(Visual Basic for Applications)로 작업을 스크립트화하여, 클릭 한 번으로 서식 변경, 데이터 정리, 보고서 생성까지 빠르게 수행할 수 있습니다.
기록 기반 자동화와 직접 코딩 두 방법이 있습니다. 초보라면 매크로 기록으로 출발하고, 점차 코드를 읽고 수정하며 자신만의 루틴을 만들어 가면 됩니다.
매크로 사용을 위한 기본 설정
개발 도구 탭 활성화
- 파일 → 옵션 → 리본 사용자 지정
- 오른쪽 목록에서 개발 도구 체크
- 확인 후 상단 리본에 ‘개발 도구’ 탭 표시
매크로 보안 설정
- 개발 도구 → 매크로 보안
- 권장: “알림 표시 후 모든 매크로 사용”으로 설정
- 신뢰할 수 있는 파일만 실행, 외부 파일은 열기 전 확인
이후부터는 기록 기능과 편집기를 자유롭게 사용할 수 있습니다. 회사 환경이라면 그룹 정책이나 신뢰할 수 있는 위치(Trusted Location)도 함께 검토하세요.
매크로 기록으로 시작하기
매크로 기록은 코드를 몰라도 자동으로 VBA를 생성합니다. 기록하면서 실제 동작을 그대로 코드로 변환하므로, 초보가 문법을 익히기 매우 좋습니다.
- 개발 도구 → 매크로 기록 클릭
- 매크로 이름 입력(예: ReportFormat) 및 저장 위치 지정
- 원하는 작업 수행(서식, 입력, 정렬 등)
- 기록 중지
- Alt + F11로 편집기 열어 자동 생성 코드 확인
기록은 “빠르게 골격 만들기”에 최적입니다. 다만 불필요한 선택(Select) 코드가 많이 포함되니 후에 정리하세요.
VBA 편집기 사용법
VBA 편집기(VBE)는 매크로를 작성·수정·디버깅하는 공간입니다. Alt + F11로 열고, 삽입 → 모듈에서 새 모듈을 추가해 코드를 작성합니다.
Sub HelloWorld()
MsgBox "안녕하세요! 매크로 실행 성공!"
End Sub
실행은 F5 또는 엑셀에서 개발 도구 → 매크로 → 해당 프로시저 선택으로 수행합니다. 코드 창과 “즉시 창”(Ctrl + G)을 함께 쓰면 디버깅이 편리합니다.
실무에서 자주 쓰는 VBA 코드
1) 셀 서식 일괄 변경
보고서 머리글, 강조 범위를 빠르게 꾸밀 때 유용합니다.
Sub FormatCells()
With Range("A1:A10")
.Font.Bold = True
.Font.Size = 12
.Interior.Color = RGB(200, 220, 255)
.HorizontalAlignment = xlCenter
End With
End Sub
2) 반복 입력 자동화(For 문)
A열에 1부터 10까지 숫자 채우기.
Sub FillNumbers()
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i
Next i
End Sub
3) 조건문으로 분기 처리
값에 따라 메시지 또는 서식 적용.
Sub CheckValue()
Dim v As Double
v = Range("B1").Value
If v > 100 Then
MsgBox "값이 100보다 큽니다."
Range("B1").Font.Color = vbRed
Else
MsgBox "값이 100 이하입니다."
Range("B1").Font.Color = vbBlack
End If
End Sub
4) 데이터 복사·붙여넣기(값만)
서식, 수식 제외하고 값만 붙여넣기.
Sub CopyPasteValues()
Range("A1:A10").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
End Sub
5) 시트 자동 생성·이름 지정
월별·부서별 시트 대량 생성.
Sub CreateSheets()
Dim i As Long, ws As Worksheet
For i = 1 To 5
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Sheet" & i
Next i
End Sub
6) 파일 자동 저장
현재 통합문서 지정 경로에 저장.
Sub SaveFile()
Dim p As String
p = Environ$("USERPROFILE") & "\Desktop\Report.xlsx"
ActiveWorkbook.SaveAs Filename:=p, FileFormat:=xlOpenXMLWorkbook
MsgBox "저장 완료: " & p
End Sub
7) 마지막 행/열 자동 탐지
동적 범위 처리에 필수.
Function LastRow(ByVal col As Long) As Long
LastRow = Cells(Rows.Count, col).End(xlUp).Row
End Function
Function LastCol(ByVal row As Long) As Long
LastCol = Cells(row, Columns.Count).End(xlToLeft).Column
End Function
8) 중복 제거
리스트에서 중복 값을 한 번에 제거.
Sub RemoveDuplicates()
With Range("A1").CurrentRegion
.RemoveDuplicates Columns:=1, Header:=xlYes
End With
End Sub
9) 자동 필터 적용 및 추출
조건에 맞는 행만 걸러서 다른 시트로 복사.
Sub FilterAndExport()
Dim src As Worksheet, dst As Worksheet
Set src = Sheets("Data")
Set dst = Sheets("Result")
src.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=">=100"
src.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy _
Destination:=dst.Range("A1")
src.AutoFilterMode = False
End Sub
10) 이벤트로 자동 실행(시트 변경 시)
값 입력 즉시 검증/포맷팅.
' 해당 시트 코드창(예: Sheet1)에 삽입
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
If IsNumeric(Target.Value) Then
If Target.Value < 0 Then
Target.Interior.Color = RGB(255, 230, 230)
Else
Target.Interior.Color = xlNone
End If
End If
End Sub
11) 고속 모드로 대량 작업
화면 업데이트/자동 계산 일시 중지로 성능 향상.
Sub FastMode(ByVal enabled As Boolean)
With Application
.ScreenUpdating = Not enabled
.EnableEvents = Not enabled
.Calculation = IIf(enabled, xlCalculationManual, xlCalculationAutomatic)
End With
End Sub
Sub BulkOperationExample()
FastMode True
' 대량 처리 코드...
Range("A1:A50000").Value = "OK"
FastMode False
End Sub
12) 파일 선택 대화상자
사용자가 직접 파일을 선택하도록 UX 개선.
Sub PickFileAndImport()
Dim f As Variant
f = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
If f = False Then Exit Sub
Workbooks.Open f
End Sub
13) 고급: 배열로 빠르게 쓰기
셀에 반복할 때보다 10배 이상 빠른 패턴.
Sub WriteWithArray()
Dim arr() As Variant, i As Long
ReDim arr(1 To 10000, 1 To 1)
For i = 1 To 10000
arr(i, 1) = i
Next i
Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub
활용 사례와 워크플로우
보고서 자동화
- 원본 데이터 정리 → 피벗 생성 → 서식/인쇄 영역 지정
- 버튼 하나로 월별/분기별 보고서 PDF 저장
데이터 정리
- 중복 제거, 공백/특수문자 치환, 열 재배치
- 필터 조건에 맞는 행만 별도 시트로 export
실무에서는 “입력 → 정리 → 분석 → 결과 배포”를 한 프로시저로 묶어 두면 유지보수가 쉬워집니다. 모듈을 기능별로 나누고, 공통 유틸리티 함수를 만들어 재사용성을 높이세요.
오류 대처와 디버깅 팁
기본 예외 처리
Sub SafeRun()
On Error GoTo EH
' 작업 코드...
MsgBox "정상 완료"
Exit Sub
EH:
MsgBox "오류 발생: " & Err.Number & " - " & Err.Description, vbExclamation
End Sub
자주 겪는 문제
- 선택 의존 코드:
Select,Activate남용은 오류 원인. 직접 객체 참조로 수정. - 병합 셀: 범위 계산/정렬에서 엇나가므로 가능하면 피하기.
- 시트/파일 이름: 한글·특수문자 포함 시 저장 형식 주의.
- 경로 권한: 회사 PC는 쓰기 권한 문제 발생. 사용자 폴더 사용 권장.
디버깅 포인트
- 중단점: 코드 줄 왼쪽 클릭으로 설정, 변수 상태 확인.
- 즉시 창: Ctrl + G 후
? 변수로 값 출력. - 스텝 실행: F8로 한 줄씩 흐름 추적.
보안과 안전한 공유
- 신뢰할 수 있는 위치: 빈번히 쓰는 통합문서는 Trusted Location에 보관.
- 디지털 서명: 배포용 매크로는 서명해 신뢰도 향상.
- 민감 정보 분리: 경로·계정·API 키 등은 별도 시트나 설정 파일로 관리.
- 외부 파일 주의: 출처 불명 매크로는 실행 전에 반드시 코드 점검.
성능 최적화와 구조화
- 화면 업데이트 중지: 대량 작업 전후로
ScreenUpdating제어. - 배열·Range 일괄 할당: 루프보다 배열로 한 번에 쓰기.
- 모듈 분리: Core, Utils, UI 등 역할로 나눠 유지보수 개선.
- 이름 규칙:
PascalCase프로시저,camelCase변수로 가독성 확보. - 주석/로그: 변경 이력과 실패 포인트 로그 남겨 복구 용이.
' 예: 공통 유틸 모듈
Public Sub UsingFastMode(ByVal task As String)
On Error GoTo EH
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Select Case task
Case "format": Call FormatCells
Case "import": Call PickFileAndImport
Case Else: MsgBox "작업 없음"
End Select
Done:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
EH:
MsgBox "오류: " & Err.Description, vbExclamation
GoTo Done
End Sub
마무리
엑셀 매크로는 “반복·규칙·대량” 업무에서 압도적 효율을 제공합니다. 기록 기능으로 출발해, 편집기에서 불필요한 선택 코드를 제거하고, 예외 처리·성능 최적화까지 적용하면 실무에 바로 통하는 자동화를 구축할 수 있습니다.