매주 같은 엑셀 작업, AI에게 코드 초안을 맡겨보세요
매주 월요일마다 지난주 실적 파일을 열고, 날짜 형식을 맞추고, 금액에 쉼표를 넣고, 빈칸을 찾고, 보고용 시트를 따로 만드는 업무가 있다고 가정해보겠습니다.
한 번 처리하는 데 10분 정도라면 큰 부담처럼 보이지 않습니다. 하지만 매주 반복하면 1년에 약 8시간이 들고, 파일이 여러 개라면 소요 시간은 더 늘어납니다. 더 큰 문제는 단순 작업일수록 집중력이 떨어져 누락이나 서식 오류가 발생하기 쉽다는 점입니다.
이럴 때 활용할 수 있는 것이 엑셀 매크로입니다. 다만 VBA 문법을 처음부터 공부하려고 하면 시작 단계에서 막히기 쉽습니다. 현실적인 접근은 ChatGPT 같은 AI 도구에 업무 절차를 설명하고, 실행 가능한 (자세히 보기) (자세히 보기) (자세히 보기) (자세히 보기) VBA 코드 초안을 받은 뒤 작은 복사본 파일에서 검증하는 것입니다.
이번 글에서는 단순히 “매크로는 반복 작업을 자동화합니다”라고 설명하지 않습니다. 실제 업무 장면을 기준으로 프롬프트를 작성하고, 코드를 엑셀에 넣고, 오류를 수정하고, 자동화 성과를 측정하는 과정까지 순서대로 진행합니다.
실전 사례: 원본 데이터를 보고용 시트로 자동 정리하기
다음과 같은 엑셀 파일을 매주 정리한다고 가정하겠습니다.
| 열 | 내용 | 반복 작업 |
|---|---|---|
| A열 | 처리일자 | 날짜 형식을 yyyy-mm-dd로 통일 |
| B열 | 담당부서 | 앞뒤 공백 제거 |
| C열 | 처리건수 | 숫자 형식 적용 |
| D열 | 처리금액 | 천 단위 쉼표와 원 표시 적용 |
기존에는 원본 시트를 복사한 뒤 열 너비를 조정하고, 제목 행을 굵게 표시하고, 빈칸이 있는 행을 확인했습니다. 이번에는 이 작업을 버튼 한 번으로 처리하는 매크로를 만들겠습니다.
AI에게 바로 코드를 요청하지 말고 업무 절차부터 적기
“엑셀 매크로 만들어줘”라고만 입력하면 AI는 현재 파일의 시트 이름, 열 구조, 예외 상황을 알 수 없습니다. 그 결과 실제 파일에 맞지 않는 코드가 나올 가능성이 큽니다.
좋은 요청문에는 최소한 다음 정보가 포함되어야 합니다.
- 원본 시트와 결과 시트의 이름
- 데이터가 들어 있는 열과 시작 행
- 자동으로 처리할 작업 순서
- 기존 결과 시트가 있을 때 처리 방법
- 원본 데이터를 변경해도 되는지 여부
ChatGPT에는 다음과 같이 입력할 수 있습니다.
입력 예시
엑셀 VBA 매크로를 작성해 주세요.
현재 파일에는 ‘원본’ 시트가 있고, 1행은 제목이며 데이터는 A열부터 D열까지 있습니다. A열은 처리일자, B열은 담당부서, C열은 처리건수, D열은 처리금액입니다.
매크로를 실행하면 ‘보고용’ 시트를 새로 만들거나, 이미 있으면 기존 내용을 지운 뒤 원본 데이터를 복사해 주세요. 원본 시트는 수정하지 마세요.
보고용 시트에서는 A열 날짜 형식을 yyyy-mm-dd로 바꾸고, B열의 앞뒤 공백을 제거하고, C열은 숫자 형식, D열은 천 단위 쉼표와 원 표시 형식으로 설정해 주세요. 제목 행은 굵게 표시하고 배경색을 넣고, 전체 열 너비는 자동 조정해 주세요.
A열부터 D열 중 빈칸이 있는 행은 연한 노란색으로 표시해 주세요. 시트가 없거나 데이터가 없을 때는 오류 메시지를 보여주도록 작성해 주세요. 초보자가 붙여 넣어 실행할 수 있는 완성된 코드로 제공해 주세요.
이 요청문의 장점은 업무 담당자가 실제로 확인해야 할 조건을 코드 생성 전에 명확하게 정리한다는 점입니다. 특히 “원본 시트는 수정하지 않는다”는 문장은 실무 파일의 훼손 가능성을 줄이는 중요한 조건입니다.

바로 실행할 수 있는 엑셀 VBA 코드
아래 코드는 앞서 설명한 업무를 기준으로 작성한 예시입니다. 시트 이름과 열 위치가 동일하다면 복사해서 사용할 수 있습니다.
Option Explicit Sub 보고용시트_자동정리() Dim wb As Workbook Dim wsSource As Worksheet Dim wsReport As Worksheet Dim lastRow As Long Dim checkRange As Range Dim rowRange As Range Dim cell As Range Dim hasBlank As Boolean Set wb = ThisWorkbook ' 1. 원본 시트 확인 On Error Resume Next Set wsSource = wb.Worksheets("원본") On Error GoTo 0 If wsSource Is Nothing Then MsgBox "'원본' 시트를 찾을 수 없습니다.", vbExclamation Exit Sub End If ' 2. 마지막 데이터 행 확인 lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row If lastRow < 2 Then MsgBox "원본 시트에 처리할 데이터가 없습니다.", vbInformation Exit Sub End If Application.ScreenUpdating = False On Error GoTo ErrorHandler ' 3. 보고용 시트 생성 또는 초기화 On Error Resume Next Set wsReport = wb.Worksheets("보고용") On Error GoTo ErrorHandler If wsReport Is Nothing Then Set wsReport = wb.Worksheets.Add(After:=wsSource) wsReport.Name = "보고용" Else wsReport.Cells.Clear End If ' 4. 원본 데이터를 값으로 복사 wsReport.Range("A1:D" & lastRow).Value = _ wsSource.Range("A1:D" & lastRow).Value ' 5. 담당부서 앞뒤 공백 제거 For Each cell In wsReport.Range("B2:B" & lastRow) If Not IsError(cell.Value) Then cell.Value = Trim(CStr(cell.Value)) End If Next cell ' 6. 열별 표시 형식 설정 wsReport.Range("A2:A" & lastRow).NumberFormat = "yyyy-mm-dd" wsReport.Range("C2:C" & lastRow).NumberFormat = "#,##0" wsReport.Range("D2:D" & lastRow).NumberFormat = "#,##0""원""" ' 7. 제목 행 서식 With wsReport.Range("A1:D1") .Font.Bold = True .Interior.Color = RGB(217, 225, 242) .HorizontalAlignment = xlCenter End With ' 8. 빈칸이 있는 행 표시 Set checkRange = wsReport.Range("A2:D" & lastRow) For Each rowRange In checkRange.Rows hasBlank = False For Each cell In rowRange.Cells If Trim(CStr(cell.Value)) = "" Then hasBlank = True Exit For End If Next cell If hasBlank Then rowRange.Interior.Color = RGB(255, 242, 204) End If Next rowRange ' 9. 표 테두리와 열 너비 설정 With wsReport.Range("A1:D" & lastRow) .Borders.LineStyle = xlContinuous .Borders.Weight = xlThin End With wsReport.Columns("A:D").AutoFit wsReport.Activate wsReport.Range("A1").Select Application.ScreenUpdating = True MsgBox "보고용 시트 정리가 완료되었습니다." & vbCrLf & _ "처리 행 수: " & lastRow - 1 & "건", vbInformation Exit Sub ErrorHandler: Application.ScreenUpdating = True MsgBox "매크로 실행 중 오류가 발생했습니다." & vbCrLf & _ "오류 내용: " & Err.Description, vbCritical End Sub
코드가 실제로 처리하는 결과
원본 시트에 다음과 같은 데이터가 있다고 가정하겠습니다.
| 처리일자 | 담당부서 | 처리건수 | 처리금액 |
|---|---|---|---|
| 2026/07/01 | 영업1팀 | 1250 | 3850000 |
| 2026/07/02 | 생산관리팀 | 980 | 2750000 |
| 2026/07/03 | 1140 | 3210000 |
매크로를 실행하면 ‘보고용’ 시트에는 다음과 같은 변화가 적용됩니다.
2026/07/01은2026-07-01형식으로 표시됩니다.영업1팀의 앞뒤 공백이 제거되어영업1팀으로 정리됩니다.3850000은3,850,000원으로 표시됩니다.- 담당부서가 비어 있는 세 번째 데이터 행은 연한 노란색으로 표시됩니다.
- 제목 행, 테두리, 열 너비가 보고용 형태로 자동 정리됩니다.
여기서 주목할 부분은 AI가 단순히 서식을 바꾸는 코드만 만든 것이 아니라, 데이터가 없거나 시트 이름이 잘못된 상황까지 확인하도록 요청했다는 점입니다. 실무 자동화에서는 정상적인 상황보다 예외 상황을 어떻게 처리하는지가 안정성을 좌우합니다.
엑셀에 매크로를 넣고 실행하는 순서
1단계: 반드시 복사본 파일에서 시작하기
현재 사용 중인 업무 파일을 바로 수정하지 마세요. 먼저 파일을 복사한 뒤 파일명에 ‘테스트’를 붙입니다.
예를 들어 원본 파일이 주간처리실적.xlsx라면 다음과 같이 복사합니다.
주간처리실적_매크로테스트.xlsm
매크로가 포함된 파일은 일반적인 .xlsx가 아니라 .xlsm 형식으로 저장해야 합니다. 엑셀의 ‘다른 이름으로 저장’ 메뉴에서 ‘Excel 매크로 사용 통합 문서’를 선택하면 됩니다. (자세히 보기)
2단계: VBA 편집기에 코드 붙여 넣기
- 엑셀에서 테스트 파일을 엽니다.
Alt + F11을 눌러 VBA 편집기를 엽니다.- 상단 메뉴에서 ‘삽입 → 모듈’을 선택합니다.
- 새로 열린 모듈 창에 코드를 붙여 넣습니다.
Ctrl + S로 저장합니다.- 엑셀 화면으로 돌아와
Alt + F8을 누릅니다. 보고용시트_자동정리를 선택하고 ‘실행’을 누릅니다.
3단계: 결과를 눈으로 대조하기
매크로가 정상 종료되었다는 메시지가 나와도 바로 실무에 적용하지 않는 편이 안전합니다. 최소한 다음 항목을 확인해야 합니다.
- 원본 시트의 값이 변경되지 않았는가
- 원본 행 수와 보고용 시트의 행 수가 같은가
- 날짜가 실제 날짜와 다르게 변환되지 않았는가
- 처리금액의 소수점이나 음수 값이 손실되지 않았는가
- 빈칸 표시 대상이 정확한가
예를 들어 원본 데이터가 327행이라면, 보고용 시트도 제목 행을 제외하고 327행이어야 합니다. 행 개수가 다르다면 코드를 계속 사용하지 말고 원인을 먼저 확인해야 합니다.

오류가 발생하면 AI에 이렇게 피드백하세요
AI가 처음 작성한 코드가 모든 엑셀 파일에서 바로 작동하는 것은 아닙니다. 시트 구조, 병합 셀, 날짜 저장 방식, 회사에서 사용하는 엑셀 버전에 따라 수정이 필요할 수 있습니다.
이때 “코드가 안 돼요”라고만 입력하면 정확한 수정안을 받기 어렵습니다. 오류가 발생한 위치와 실제 증상을 함께 전달해야 합니다.
오류 수정 요청 예시
앞서 작성한 VBA 코드를 실행했더니 ‘런타임 오류 13: 형식이 일치하지 않습니다’라는 메시지가 나옵니다.
오류가 발생한 줄은 다음 부분입니다.
If Trim(CStr(cell.Value)) = "" Then원본 데이터에는 일반 값뿐 아니라 수식 오류인 #N/A도 포함되어 있습니다. #N/A 셀이 있어도 매크로가 중단되지 않고, 해당 행을 노란색으로 표시하도록 코드를 수정해 주세요. 기존 기능은 유지하고 수정된 전체 코드를 다시 제공해 주세요.
이처럼 오류 메시지, 오류가 발생한 코드 줄, 데이터의 특성을 함께 입력하면 AI가 원인을 좁히기 쉬워집니다. 수정된 코드 일부만 받기보다 “전체 코드를 다시 제공해 달라”고 요청하면 초보자도 교체 과정에서 실수할 가능성을 줄일 수 있습니다.
대부분 놓치는 단계: 자동화 전후 성과를 숫자로 남기기
매크로가 실행된다는 사실만으로 업무 개선이 끝나는 것은 아닙니다. 실제로 시간이 줄었는지, 오류가 감소했는지 확인해야 다음 업무에도 자동화를 확대할 근거가 생깁니다.
다음과 같은 간단한 기록표를 만들어 보세요.
| 측정 항목 | 자동화 전 | 자동화 후 | 확인 방법 |
|---|---|---|---|
| 작업 시간 | 평균 12분 | 평균 2분 | 작업 시작·종료 시각 기록 |
| 서식 누락 | 월 3건 | 월 0건 | 최종 검토 결과 기록 |
| 빈칸 발견 | 수작업 확인 | 자동 색상 표시 | 표시 행과 원본 대조 |
| 수정 요청 | 월 2회 | 월 1회 이하 | 보고서 반려 횟수 기록 |
작업 시간이 12분에서 2분으로 줄었다면 단순히 “편해졌다”가 아니라 회당 10분이 절감된 것입니다. 주 1회 실행하면 연간 약 8시간, 주 5회 실행하면 연간 약 43시간을 줄일 수 있습니다. 다만 이 수치는 실제 작업 빈도와 검토 시간에 따라 달라지므로, 각자의 업무 기록으로 계산해야 합니다.
자동화 후에도 처음 2~4주는 결과를 계속 대조하는 편이 좋습니다. 데이터 구조가 바뀌거나 새 열이 추가되면 기존 매크로가 일부 데이터를 누락할 수 있기 때문입니다.
사내 업무에 적용할 때 지켜야 할 안전 원칙
회사 자료를 AI에 입력할 때는 코드 작성보다 정보 보호를 먼저 고려해야 합니다. 고객명, 주민등록번호, 연락처, 계약금액, 사번, 계좌번호, 미공개 실적처럼 외부 전송이 제한될 수 있는 정보는 그대로 입력하지 않는 것이 안전합니다.
AI에게 필요한 것은 실제 데이터가 아니라 파일 구조와 처리 규칙인 경우가 많습니다. 다음과 같이 가상의 항목으로 바꿔도 충분히 코드를 만들 수 있습니다.
- 실제 거래처명 → 거래처A, 거래처B
- 실제 직원 이름 → 담당자1, 담당자2
- 실제 매출액 → 1000000, 2000000 같은 예시 금액
- 실제 파일명 → 원본자료.xlsx
- 실제 부서명 → 영업팀, 관리팀 같은 일반 명칭
또한 인터넷에서 받은 매크로 파일이나 출처를 확인할 수 없는 코드는 바로 실행하지 마세요. VBA 코드는 파일 삭제, 외부 프로그램 실행, 다른 문서 변경과 같은 작업도 수행할 수 있습니다. 코드를 검토하기 어렵다면 사내 전산 담당자나 엑셀 관리 담당자에게 확인을 요청하는 것이 적절합니다.
다음 자동화로 확장하는 방법
이번 예제가 정상적으로 작동한다면 동일한 방식으로 다음 업무도 자동화할 수 있습니다.
- 매일 내려받은 실적 파일에서 필요한 열만 추출하기
- 부서별 데이터를 각각의 시트로 분리하기
- 여러 시트의 월별 실적을 하나의 요약표로 합치기
- 마감일이 지난 행을 자동으로 표시하기
- 보고서 출력 영역과 인쇄 방향을 자동 설정하기
처음부터 여러 기능을 한 코드에 넣기보다 ‘복사’, ‘서식 정리’, ‘빈칸 표시’처럼 작은 단위로 나누어 검증하는 편이 좋습니다. 작은 자동화가 안정적으로 작동한 뒤 기능을 추가하면 오류가 생겼을 때 원인을 찾기 쉽습니다.
FAQ
Q1. 회사 데이터를 ChatGPT에 그대로 붙여 넣어도 되나요?
사내 보안 규정과 회사에서 승인한 AI 사용 정책을 먼저 확인해야 합니다. 고객 정보, 개인정보, 계약 조건, 미공개 실적과 같은 자료는 그대로 입력하지 않는 것이 안전합니다. 코드 작성이 목적이라면 실제 값 대신 가상의 데이터와 열 구조만 제공해도 대부분의 매크로 초안을 만들 수 있습니다.
Q2. 매크로를 실행했는데 엑셀에서 보안 경고가 표시됩니다.
매크로가 포함된 파일을 열면 엑셀에서 보안 경고가 나타날 수 있습니다. 본인이 작성하거나 신뢰할 수 있는 담당자가 검토한 파일인지 확인한 뒤 실행해야 합니다. 출처가 불분명한 파일의 ‘콘텐츠 사용’을 무조건 허용해서는 안 됩니다. 회사 PC라면 보안 설정을 임의로 변경하지 말고 전산 담당자의 지침을 따르세요.
Q3. AI가 만든 코드가 잘못된 값을 만들 수도 있나요?
가능합니다. AI가 만든 코드는 초안으로 보고 복사본 파일에서 검증해야 합니다. 원본과 결과의 행 수, 합계, 날짜, 빈칸, 음수, 수식 오류를 대조하고 처음 몇 주 동안은 사람이 최종 확인하는 절차를 유지하세요. 파일 구조가 바뀌었을 때는 기존 매크로를 그대로 실행하지 말고 코드의 범위와 열 위치를 다시 확인해야 합니다.
