카테고리 없음

엑셀 매크로 사용법과 주로 쓰는 VBA 코드 정리

호랑이티거 2025. 12. 8. 11:50
728x90
반응형

 

엑셀 매크로 사용법과 주로 쓰는 VBA 코드 정리

기초 설정부터 실무 자동화 코드, 오류·보안·최적화 팁까지 한 번에 끝내는 가이드

목차

매크로란 무엇인가

엑셀 매크로(Macro)는 반복되는 업무를 자동화하는 기능입니다. 엑셀 내부의 VBA(Visual Basic for Applications)로 작업을 스크립트화하여, 클릭 한 번으로 서식 변경, 데이터 정리, 보고서 생성까지 빠르게 수행할 수 있습니다.

기록 기반 자동화와 직접 코딩 두 방법이 있습니다. 초보라면 매크로 기록으로 출발하고, 점차 코드를 읽고 수정하며 자신만의 루틴을 만들어 가면 됩니다.

핵심: “자주 하는 단순 반복”은 반드시 자동화 대상입니다. 작은 자동화부터 시작하세요.

매크로 사용을 위한 기본 설정

개발 도구 탭 활성화

  1. 파일옵션리본 사용자 지정
  2. 오른쪽 목록에서 개발 도구 체크
  3. 확인 후 상단 리본에 ‘개발 도구’ 탭 표시

매크로 보안 설정

  • 개발 도구매크로 보안
  • 권장: “알림 표시 후 모든 매크로 사용”으로 설정
  • 신뢰할 수 있는 파일만 실행, 외부 파일은 열기 전 확인

이후부터는 기록 기능과 편집기를 자유롭게 사용할 수 있습니다. 회사 환경이라면 그룹 정책이나 신뢰할 수 있는 위치(Trusted Location)도 함께 검토하세요.

매크로 기록으로 시작하기

매크로 기록은 코드를 몰라도 자동으로 VBA를 생성합니다. 기록하면서 실제 동작을 그대로 코드로 변환하므로, 초보가 문법을 익히기 매우 좋습니다.

  1. 개발 도구매크로 기록 클릭
  2. 매크로 이름 입력(예: ReportFormat) 및 저장 위치 지정
  3. 원하는 작업 수행(서식, 입력, 정렬 등)
  4. 기록 중지
  5. 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

마무리

엑셀 매크로는 “반복·규칙·대량” 업무에서 압도적 효율을 제공합니다. 기록 기능으로 출발해, 편집기에서 불필요한 선택 코드를 제거하고, 예외 처리·성능 최적화까지 적용하면 실무에 바로 통하는 자동화를 구축할 수 있습니다.

다음 단계: 가장 자주 하는 3가지 작업을 리스트업하고, 위의 예제 코드를 복사해 자신만의 매크로로 다듬어 보세요.

태그

엑셀 엑셀매크로 VBA 엑셀자동화 엑셀팁 엑셀코드 엑셀강좌 엑셀사용법 엑셀매크로코드 엑셀매크로활용 엑셀매크로기초 엑셀매크로예제 엑셀매크로자동화 엑셀매크로작성 엑셀매크로강의 엑셀매크로정리 엑셀매크로블로그 엑셀매크로애드센스 엑셀매크로효율화

 

© 2025 엑셀 매크로 가이드 · 재배포 시 출처 표기 부탁드립니다.
728x90
반응형