VBA란?
언제 사용하나요?
💡 실무 팁: VBA는 어려워 보이지만 기본 패턴만 익히면 누구나 활용할 수 있어요!
방법 1: 키보드 단축키
Alt + F11
방법 2: 개발자 탭 활용 1. 파일 → 옵션 → 리본 사용자 지정 2. “개발자” 탭 체크 3. 개발자 탭 → Visual Basic 클릭
Hello World 예시:
Sub HelloWorld()
MsgBox "안녕하세요! VBA 첫 매크로입니다."
End Sub
실행 방법: 1. VBA 편집기에서 F5 키 누르기 2. 또는 개발자 탭 → 매크로 → 실행
상황: 매월 기본급에 수당을 더해서 총 급여를 계산하고 싶어요
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
상황: 여러 시트의 데이터를 하나의 요약 보고서로 만들고 싶어요
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
상황: 직원 데이터에서 중복 제거하고 누락된 정보를 찾고 싶어요
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
기본 데이터 타입:
Dim 이름 As String ' 문자열 Dim 나이 As Integer ' 정수 Dim 급여 As Double ' 실수 Dim 입사일 As Date ' 날짜 Dim 재직여부 As Boolean ' 참/거짓
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 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
실수 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
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
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
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
1단계: 기초 익히기
2단계: 실무 적용
3단계: 고급 기능
VBA와 함께 쓰면 좋은 기능들:
VLOOKUP: VBA에서 WorksheetFunction으로 활용 SUMIF: 조건부 집계를 VBA로 자동화 피벗테이블: VBA로 피벗테이블 자동 생성 매크로: VBA의 기본 개념
VBA 마스터가 되려면:
1. 🎯 작은 것부터 시작: 매크로 기록 기능으로 시작하기 2. 🔄 반복 연습: 매일 작은 매크로라도 만들어보기 3. 📚 코드 수집: 유용한 코드를 모아서 라이브러리 만들기 4. 🛡️ 안전 습관: 항상 백업하고 오류 처리하기
다음 단계: VBA에 익숙해지면 Power Automate나 Python도 배워보세요!
🤖 반복 업무는 이제 그만! VBA로 스마트하게!
한 번 만들어두면 평생 써먹는 자동화의 마법을 경험하세요. ✨