사용자 도구

사이트 도구


wiki:hr:excel:excel_vba

엑셀 VBA 자동화 가이드

VBA로 반복 업무를 자동화하세요! 매월 반복되는 급여 계산, 보고서 생성, 데이터 정리 등을 클릭 한 번으로 해결할 수 있습니다.


🎯 VBA 기본 개념

VBA란?

  1. Visual Basic for Applications: 엑셀 전용 프로그래밍 언어
  2. 반복적인 작업을 자동화하는 매크로 작성 도구
  3. 복잡한 계산과 데이터 처리를 자동으로 수행

언제 사용하나요?

  1. 🔄 반복 작업 자동화: 매월 동일한 보고서 생성
  2. 📊 복잡한 데이터 처리: 여러 시트 간 데이터 통합
  3. 🎨 사용자 인터페이스: 버튼 클릭으로 작업 실행
  4. 대량 데이터 처리: 수천 개 행의 데이터 일괄 처리

💡 실무 팁: VBA는 어려워 보이지만 기본 패턴만 익히면 누구나 활용할 수 있어요!


🚀 VBA 시작하기

VBA 편집기 열기

방법 1: 키보드 단축키

Alt + F11

방법 2: 개발자 탭 활용 1. 파일 → 옵션 → 리본 사용자 지정 2. “개발자” 탭 체크 3. 개발자 탭 → Visual Basic 클릭

첫 번째 매크로 만들기

Hello World 예시:

Sub HelloWorld()
    MsgBox "안녕하세요! VBA 첫 매크로입니다."
End Sub

실행 방법: 1. VBA 편집기에서 F5 키 누르기 2. 또는 개발자 탭 → 매크로 → 실행


🔥 실무 활용 예시

예시 1: 급여 계산 자동화

상황: 매월 기본급에 수당을 더해서 총 급여를 계산하고 싶어요

VBA 코드:

Sub 급여계산()
    Dim i As Integer
    Dim 마지막행 As Integer
 
    ' 데이터가 있는 마지막 행 찾기
    마지막행 = Cells(Rows.Count, 1).End(xlUp).Row
 
    ' A열: 이름, B열: 기본급, C열: 수당, D열: 총급여
    For i = 2 To 마지막행  ' 2행부터 시작 (1행은 헤더)
        ' 총급여 = 기본급 + 수당
        Cells(i, 4).Value = Cells(i, 2).Value + Cells(i, 3).Value
 
        ' 총급여가 500만원 이상이면 셀 색상 변경
        If Cells(i, 4).Value >= 5000000 Then
            Cells(i, 4).Interior.Color = RGB(255, 255, 0)  ' 노란색
        End If
    Next i
 
    MsgBox "급여 계산이 완료되었습니다!"
End Sub

예시 2: 보고서 자동 생성

상황: 여러 시트의 데이터를 하나의 요약 보고서로 만들고 싶어요

VBA 코드:

Sub 보고서생성()
    Dim ws As Worksheet
    Dim 요약시트 As Worksheet
    Dim 행번호 As Integer
 
    ' 요약 시트 생성 또는 선택
    On Error Resume Next
    Set 요약시트 = Worksheets("요약보고서")
    If 요약시트 Is Nothing Then
        Set 요약시트 = Worksheets.Add
        요약시트.Name = "요약보고서"
    End If
    On Error GoTo 0
 
    ' 요약 시트 초기화
    요약시트.Cells.Clear
    요약시트.Cells(1, 1).Value = "부서명"
    요약시트.Cells(1, 2).Value = "총인원"
    요약시트.Cells(1, 3).Value = "총급여"
 
    행번호 = 2
 
    ' 각 시트별로 데이터 집계
    For Each ws In Worksheets
        If ws.Name <> "요약보고서" Then
            요약시트.Cells(행번호, 1).Value = ws.Name
            요약시트.Cells(행번호, 2).Value = ws.Cells(Rows.Count, 1).End(xlUp).Row - 1
            요약시트.Cells(행번호, 3).Value = Application.WorksheetFunction.Sum(ws.Range("C:C"))
            행번호 = 행번호 + 1
        End If
    Next ws
 
    ' 헤더 서식 적용
    With 요약시트.Range("A1:C1")
        .Font.Bold = True
        .Interior.Color = RGB(200, 200, 200)
    End With
 
    MsgBox "보고서 생성이 완료되었습니다!"
End Sub

예시 3: 데이터 정리 및 검증

상황: 직원 데이터에서 중복 제거하고 누락된 정보를 찾고 싶어요

VBA 코드:

Sub 데이터정리()
    Dim i As Integer, j As Integer
    Dim 마지막행 As Integer
    Dim 중복개수 As Integer
 
    마지막행 = Cells(Rows.Count, 1).End(xlUp).Row
    중복개수 = 0
 
    ' 중복 데이터 찾기 및 표시
    For i = 2 To 마지막행
        For j = i + 1 To 마지막행
            ' A열(사번)이 같은 경우
            If Cells(i, 1).Value = Cells(j, 1).Value And Cells(i, 1).Value <> "" Then
                Cells(j, 1).Interior.Color = RGB(255, 200, 200)  ' 연한 빨간색
                중복개수 = 중복개수 + 1
            End If
        Next j
    Next i
 
    ' 누락된 데이터 찾기
    For i = 2 To 마지막행
        ' 이름이 비어있는 경우
        If Cells(i, 2).Value = "" Then
            Cells(i, 2).Interior.Color = RGB(255, 255, 200)  ' 연한 노란색
            Cells(i, 2).Value = "이름 누락"
        End If
 
        ' 부서가 비어있는 경우
        If Cells(i, 3).Value = "" Then
            Cells(i, 3).Interior.Color = RGB(255, 255, 200)
            Cells(i, 3).Value = "부서 누락"
        End If
    Next i
 
    MsgBox "데이터 정리 완료!" & vbNewLine & "중복 데이터: " & 중복개수 & "건"
End Sub

🛠️ VBA 핵심 문법

변수 선언

기본 데이터 타입:

Dim 이름 As String          ' 문자열
Dim 나이 As Integer         ' 정수
Dim 급여 As Double          ' 실수
Dim 입사일 As Date          ' 날짜
Dim 재직여부 As Boolean     ' 참/거짓

반복문 (Loop)

For 반복문:

' 1부터 10까지 반복
For i = 1 To 10
    Cells(i, 1).Value = i
Next i
 
' 역순 반복 (10부터 1까지)
For i = 10 To 1 Step -1
    Cells(i, 2).Value = i
Next i

For Each 반복문:

' 모든 시트에 대해 반복
For Each ws In Worksheets
    ws.Cells(1, 1).Value = "제목"
Next ws
 
' 선택된 셀 범위에 대해 반복
For Each cell In Selection
    cell.Value = cell.Value * 1.1  ' 10% 증가
Next cell

조건문 (If)

기본 조건문:

If Cells(1, 1).Value > 100 Then
    MsgBox "100보다 큽니다"
ElseIf Cells(1, 1).Value = 100 Then
    MsgBox "100입니다"
Else
    MsgBox "100보다 작습니다"
End If

🎨 사용자 인터페이스 만들기

버튼으로 매크로 실행

버튼 추가 방법: 1. 개발자 탭 → 삽입 → 단추(양식 컨트롤) 2. 시트에 버튼 그리기 3. 매크로 지정 대화상자에서 실행할 매크로 선택

버튼 클릭 이벤트:

Sub 버튼1_Click()
    Call 급여계산  ' 급여계산 매크로 실행
End Sub

입력 상자 활용

사용자 입력 받기:

Sub 부서별급여조회()
    Dim 부서명 As String
    Dim 총급여 As Double
 
    ' 사용자로부터 부서명 입력받기
    부서명 = InputBox("조회할 부서명을 입력하세요:", "부서 선택")
 
    If 부서명 <> "" Then
        ' SUMIF 함수로 해당 부서 급여 합계 계산
        총급여 = Application.WorksheetFunction.SumIf(Range("B:B"), 부서명, Range("C:C"))
 
        ' 결과 표시
        MsgBox 부서명 & " 부서의 총 급여: " & Format(총급여, "#,##0") & "원"
    End If
End Sub

⚠️ VBA 주의사항과 팁

자주 하는 실수

실수 1: 변수 선언 안 하기

' 나쁜 예시
Sub 나쁜예시()
    i = 1  ' 변수 선언 없음
    For i = 1 To 10
        ' ...
    Next i
End Sub
 
' 좋은 예시
Sub 좋은예시()
    Dim i As Integer  ' 변수 선언
    For i = 1 To 10
        ' ...
    Next i
End Sub

실수 2: 오류 처리 안 하기

' 오류 처리 추가
Sub 안전한매크로()
    On Error GoTo 오류처리
 
    ' 매크로 코드
    Dim 결과 As Double
    결과 = 1 / 0  ' 오류 발생 가능한 코드
 
    Exit Sub
 
오류처리:
    MsgBox "오류가 발생했습니다: " & Err.Description
End Sub

성능 최적화 팁

화면 업데이트 중지:

Sub 빠른매크로()
    ' 화면 업데이트 중지로 속도 향상
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
 
    ' 매크로 실행 코드
    ' ...
 
    ' 화면 업데이트 재개
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

📋 실무 매크로 모음

1. 빈 행 삭제

Sub 빈행삭제()
    Dim i As Integer
    Dim 마지막행 As Integer
 
    마지막행 = Cells(Rows.Count, 1).End(xlUp).Row
 
    ' 아래에서부터 위로 검사 (행 삭제 시 번호 변경 방지)
    For i = 마지막행 To 2 Step -1
        If Cells(i, 1).Value = "" Then
            Rows(i).Delete
        End If
    Next i
 
    MsgBox "빈 행 삭제가 완료되었습니다."
End Sub

2. 데이터 백업

Sub 데이터백업()
    Dim 백업시트 As Worksheet
    Dim 오늘날짜 As String
 
    오늘날짜 = Format(Date, "yyyy-mm-dd")
 
    ' 백업 시트 생성
    Set 백업시트 = Worksheets.Add
    백업시트.Name = "백업_" & 오늘날짜
 
    ' 현재 시트 데이터 복사
    ActiveSheet.UsedRange.Copy
    백업시트.Cells(1, 1).PasteSpecial xlPasteAll
 
    Application.CutCopyMode = False
    MsgBox "데이터 백업이 완료되었습니다: " & 백업시트.Name
End Sub

3. 이메일 주소 검증

Sub 이메일검증()
    Dim i As Integer
    Dim 마지막행 As Integer
    Dim 이메일 As String
 
    마지막행 = Cells(Rows.Count, 4).End(xlUp).Row  ' D열에 이메일
 
    For i = 2 To 마지막행
        이메일 = Cells(i, 4).Value
 
        ' 이메일 형식 검증 (간단한 방법)
        If InStr(이메일, "@") = 0 Or InStr(이메일, ".") = 0 Then
            Cells(i, 4).Interior.Color = RGB(255, 200, 200)  ' 빨간색 표시
            Cells(i, 5).Value = "이메일 형식 오류"
        Else
            Cells(i, 4).Interior.Color = RGB(200, 255, 200)  ' 초록색 표시
            Cells(i, 5).Value = "정상"
        End If
    Next i
 
    MsgBox "이메일 검증이 완료되었습니다."
End Sub

🎓 VBA 학습 로드맵

1단계: 기초 익히기

  1. [ ] 매크로 기록 기능 사용해보기
  2. [ ] 기본 문법 (변수, 반복문, 조건문) 연습
  3. [ ] 셀 참조 방법 익히기

2단계: 실무 적용

  1. [ ] 간단한 계산 자동화
  2. [ ] 데이터 정리 매크로 작성
  3. [ ] 보고서 생성 자동화

3단계: 고급 기능

  1. [ ] 사용자 폼 만들기
  2. [ ] 다른 프로그램과 연동
  3. [ ] 오류 처리 및 최적화

🔗 관련 자료

VBA와 함께 쓰면 좋은 기능들:

VLOOKUP: VBA에서 WorksheetFunction으로 활용 SUMIF: 조건부 집계를 VBA로 자동화 피벗테이블: VBA로 피벗테이블 자동 생성 매크로: VBA의 기본 개념


💡 마무리 팁

VBA 마스터가 되려면:

1. 🎯 작은 것부터 시작: 매크로 기록 기능으로 시작하기 2. 🔄 반복 연습: 매일 작은 매크로라도 만들어보기 3. 📚 코드 수집: 유용한 코드를 모아서 라이브러리 만들기 4. 🛡️ 안전 습관: 항상 백업하고 오류 처리하기

다음 단계: VBA에 익숙해지면 Power AutomatePython도 배워보세요!


🤖 반복 업무는 이제 그만! VBA로 스마트하게!
한 번 만들어두면 평생 써먹는 자동화의 마법을 경험하세요.
wiki/hr/excel/excel_vba.txt · 마지막으로 수정됨: 저자 syjang0803

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki