반응형
엑셀VBA매크로자동화
엑셀 VBA 매크로 입문: 반복 작업 자동화 시작하기 (실전 코드 포함)
매일 같은 작업을 반복하고 있다면 VBA 매크로로 자동화할 수 있습니다. 코딩 경험이 없어도 기본 문법만 알면 충분합니다. 이 글에서는 VBA의 기초부터 실무에서 바로 쓸 수 있는 완성 코드까지 단계별로 설명합니다.
1. VBA 편집기 열기
1
개발 도구 탭 활성화: 파일 → 옵션 → 리본 사용자 지정 → '개발 도구' 체크
2
VBA 편집기 열기: 단축키 Alt + F11
3
모듈 삽입: 삽입 메뉴 → 모듈 (또는 프로젝트 창에서 우클릭 → 삽입 → 모듈)
4
실행: 코드 작성 후 F5 또는 개발 도구 탭 → 매크로 실행
2. VBA 기본 문법
Sub와 End Sub
' 모든 매크로는 Sub와 End Sub 사이에 작성합니다 Sub 매크로이름() ' 여기에 코드 작성 End Sub
변수 선언과 데이터 타입
Sub 변수예시() Dim 이름 As String ' 문자열 Dim 나이 As Integer ' 정수 (-32,768 ~ 32,767) Dim 금액 As Long ' 큰 정수 (권장) Dim 비율 As Double ' 소수점 포함 실수 Dim 완료여부 As Boolean ' True / False Dim 날짜 As Date ' 날짜 이름 = "홍길동" 나이 = 35 금액 = 5000000 완료여부 = True MsgBox 이름 & "님 나이: " & 나이 End Sub
셀 참조 방법
' 특정 셀 참조 Range("A1").Value = "안녕하세요" Cells(1, 1).Value = "안녕하세요" ' 1행 1열 = A1 ' 현재 선택된 셀 ActiveCell.Value = "현재 셀" ' 셀 범위 Range("A1:C10").ClearContents ' 내용 지우기 Range("A1:C10").Interior.Color = RGB(255, 255, 0) ' 노란색 배경
3. 조건문과 반복문
If-Then-Else 조건문
Sub 성적평가() Dim 점수 As Integer 점수 = Range("B2").Value If 점수 >= 90 Then Range("C2").Value = "A" ElseIf 점수 >= 80 Then Range("C2").Value = "B" ElseIf 점수 >= 70 Then Range("C2").Value = "C" Else Range("C2").Value = "F" End If End Sub
For-Next 반복문
Sub 자동번호입력() Dim i As Integer For i = 1 To 100 Cells(i, 1).Value = i ' A1부터 A100까지 1~100 입력 Next i End Sub
Do-While 반복문 (마지막 행까지 처리)
Sub 마지막행까지처리() Dim 행 As Long 행 = 2 ' 2행부터 시작 (1행은 헤더) Do While Cells(행, 1).Value <> "" ' A열이 빈 셀이 될 때까지 반복 ' B열 값에 세금(10%) 더해서 C열에 입력 Cells(행, 3).Value = Cells(행, 2).Value * 1.1 행 = 행 + 1 Loop End Sub
4. 실무에서 바로 쓰는 완성 매크로 5개
매크로 1: 시트를 PDF로 자동 저장
Sub PDF로저장() Dim 파일경로 As String 파일경로 = "C:\Users\user\Desktop\" & Format(Now, "YYYY-MM-DD") & "_보고서.pdf" ActiveSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=파일경로, _ Quality:=xlQualityStandard MsgBox "PDF 저장 완료: " & 파일경로 End Sub
매크로 2: 특정 열 기준으로 행 삭제
Sub 빈행삭제() Dim 마지막행 As Long Dim i As Long 마지막행 = Cells(Rows.Count, "A").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
매크로 3: 여러 시트를 하나로 합치기
Sub 시트합치기() Dim 결과시트 As Worksheet Dim 원본시트 As Worksheet Dim 마지막행 As Long Dim 대상행 As Long ' '결과' 시트가 없으면 생성 On Error Resume Next Set 결과시트 = Sheets("결과") On Error GoTo 0 If 결과시트 Is Nothing Then Set 결과시트 = Sheets.Add(After:=Sheets(Sheets.Count)) 결과시트.Name = "결과" End If 결과시트.Cells.Clear 대상행 = 1 For Each 원본시트 In ThisWorkbook.Worksheets If 원본시트.Name <> "결과" Then 마지막행 = 원본시트.Cells(Rows.Count, 1).End(xlUp).Row If 대상행 = 1 Then ' 첫 시트는 헤더 포함 복사 원본시트.Rows("1:" & 마지막행).Copy 결과시트.Rows(대상행) 대상행 = 대상행 + 마지막행 Else ' 이후 시트는 헤더 제외 원본시트.Rows("2:" & 마지막행).Copy 결과시트.Rows(대상행) 대상행 = 대상행 + 마지막행 - 1 End If End If Next 원본시트 MsgBox "시트 합치기 완료!" End Sub
매크로 4: 조건부 서식을 값으로 고정
Sub 배경색_고정() ' 선택 영역의 조건부 서식 배경색을 일반 서식으로 변환 Dim 셀 As Range For Each 셀 In Selection If 셀.DisplayFormat.Interior.ColorIndex <> xlNone Then 셀.Interior.Color = 셀.DisplayFormat.Interior.Color End If Next 셀 End Sub
매크로 5: 이메일 자동 발송 (Outlook 연동)
Sub 이메일발송() Dim Outlook As Object Dim 메일 As Object Set Outlook = CreateObject("Outlook.Application") Set 메일 = Outlook.CreateItem(0) With 메일 .To = "recipient@example.com" .CC = "cc@example.com" .Subject = Format(Date, "YYYY년 MM월") & " 실적 보고서" .Body = "안녕하세요." & vbCrLf & vbCrLf & _ "이달 실적 보고서를 첨부합니다." & vbCrLf & vbCrLf & _ "감사합니다." .Attachments.Add ActiveWorkbook.FullName .Send ' .Display로 변경하면 발송 전 확인 가능 End With MsgBox "이메일 발송 완료" End Sub
5. 매크로 보안 및 파일 저장
- 매크로 포함 파일은 반드시 .xlsm 형식으로 저장 (일반 .xlsx는 매크로 삭제됨)
- 다른 PC에서 파일 열 때 '콘텐츠 사용' 클릭 필요
- 회사 내 공유 파일에 매크로 포함 시 보안 정책 확인
VBA 매크로 핵심 정리
- 편집기: Alt + F11 → 모듈 삽입 → 코드 작성
- 기본 구조: Sub 이름() … End Sub
- 셀 참조: Range("A1") 또는 Cells(행, 열)
- 마지막 행 찾기: Cells(Rows.Count, 1).End(xlUp).Row
- 반복문: For i = 1 To N / Do While … Loop
- 파일 저장: 반드시 .xlsm 형식으로 저장
반응형
'컴퓨터 활용 공간 > 엑셀(Excel)' 카테고리의 다른 글
| 엑셀 피벗 테이블 완벽 가이드: 데이터 분석의 핵심 도구 완전 정복 (1) | 2026.05.09 |
|---|---|
| PDF 표를 엑셀로 깔끔하게 가져오기 (0) | 2026.05.08 |
| VLOOKUP vs INDEX-MATCH: 언제 무엇을 써야 하는가? 완전 비교 가이드 (0) | 2026.05.08 |
| 엑셀 공유 파일, 잘못된 입력으로집계 망친 적 있나요? 이걸로 막으세요 (0) | 2026.05.06 |
| 엑셀 인쇄 왜 이렇게 안 될까 — 5단계로 완전 정복 (8) | 2026.05.05 |