ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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%를 커버할 수 있다. 지금 당장 반복하는 작업 하나를 골라 코드로 만들어보자.

     

     

     

    반응형
Designed by Tistory.