ChatGPT로 Excel VBA 매크로 작성하기

시작하기: 첫 번째 AI 생성 VBA 매크로

ChatGPT는 간단한 영어 설명으로 완전하고 작동하는 VBA 매크로를 생성할 수 있습니다. 매크로를 실행하려면 Excel을 열고 Alt + F11을 눌러 VBA 편집기를 열고, 새 모듈을 삽입(삽입 > 모듈)한 후 코드를 붙여넣고 F5로 실행합니다. 첫 번째 프롬프트는 간단하고 테스트 가능해야 합니다. 예: "선택한 범위의 배경색을 연한 파란색으로 변경하는 VBA 매크로를 작성해주세요." 이렇게 하면 복잡한 자동화를 다루기 전에 생성된 코드가 환경에서 실행되는지 확인할 수 있습니다.

항상 매크로 사용 파일(.xlsm)로 저장하고 일반 .xlsx로 저장하지 마세요. 표준 통합 문서는 저장 시 모든 VBA 코드를 제거합니다. 리본 아래에 보안 경고 표시줄이 나타나면 "콘텐츠 사용"을 클릭하여 매크로 실행을 허용하세요. ChatGPT 생성 코드의 경우, 매크로가 예상대로 동작한다고 확신할 때까지 테스트 복사본에서 실행하세요.

생산성 매크로: 오늘 바로 사용할 수 있는 실제 예제

매크로 1: 데이터 테이블 자동 서식 지정

프롬프트: "현재 선택 영역에 대해 헤더 행을 굵게 표시하고, 모든 데이터 셀에 하단 테두리를 추가하고, 열 너비를 자동 맞춤하고, 맨 위 행을 고정하는 VBA 매크로를 작성해주세요."

생성된 코드:

Sub FormatDataTable()
    Dim rng As Range
    Set rng = Selection
    
    ' 헤더 행 서식
    With rng.Rows(1)
        .Font.Bold = True
        .Interior.Color = RGB(68, 114, 196)
        .Font.Color = RGB(255, 255, 255)
    End With
    
    ' 모든 셀에 테두리 추가
    With rng.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(180, 180, 180)
    End With
    
    ' 열 너비 자동 맞춤
    rng.EntireColumn.AutoFit
    
    ' 맨 위 행 고정
    ActiveWindow.SplitRow = 1
    ActiveWindow.FreezePanes = True
    
    MsgBox "테이블 서식이 완료되었습니다!", vbInformation
End Sub

이 매크로는 안전하고 되돌릴 수 있으며(실행 후 Ctrl+Z 사용), Range 개체, 효율적인 속성 설정을 위한 With 블록, MsgBox를 통한 사용자 피드백 등 필수 VBA 패턴을 보여줍니다.

매크로 2: 각 워크시트를 개별 PDF로 내보내기

프롬프트: "활성 통합 문서의 모든 워크시트를 통합 문서와 동일한 폴더에 개별 PDF 파일로 내보내는 VBA 매크로를 작성해주세요. 파일 이름은 '통합문서명_시트명.pdf' 형식으로 하고, 숨겨진 시트는 건너뛰세요."

생성된 코드:

Sub ExportSheetsAsPDF()
    Dim ws As Worksheet
    Dim folderPath As String
    Dim pdfName As String
    
    folderPath = ThisWorkbook.Path & "\"
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            pdfName = folderPath & _
                      Replace(ThisWorkbook.Name, ".xlsm", "") & _
                      "_" & ws.Name & ".pdf"
            
            ws.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=pdfName, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True
            
            Debug.Print "내보냄: " & pdfName
        End If
    Next ws
    
    MsgBox "내보내기 완료! 직접 실행 창(Ctrl+G)에서 세부 정보를 확인하세요.", vbInformation
End Sub

이 매크로는 Excel의 파일 > 다른 이름으로 저장 > PDF와 동일한 엔진인 ExportAsFixedFormat을 사용합니다. Worksheets 컬렉션을 순회하고, 숨겨진 시트를 건너뛰며, 문자열 연결로 파일 이름을 동적으로 구성합니다. Debug.Print 문으로 직접 실행 창에서 출력을 확인할 수 있습니다.

매크로 3: Excel 데이터로 Outlook에서 이메일 보내기

프롬프트: "A열(A2부터 시작)에서 이메일 주소, B열에서 제목, C열에서 본문을 읽는 VBA 매크로를 작성해주세요. 각 행에 대해 Outlook을 통해 이메일을 보냅니다. A열이 비어 있으면 중지합니다. 전송 간 2초 지연을 추가하세요."

생성된 코드:

Sub SendBulkEmails()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim i As Long
    Dim lastRow As Long
    
    On Error Resume Next
    Set OutApp = GetObject(, "Outlook.Application")
    If OutApp Is Nothing Then
        Set OutApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        If Cells(i, 1).Value = "" Then Exit For
        
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = Cells(i, 1).Value
            .Subject = Cells(i, 2).Value
            .Body = Cells(i, 3).Value
            .Send
        End With
        
        Application.Wait Now + TimeValue("00:00:02")
    Next i
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    MsgBox "모든 이메일이 전송되었습니다!", vbInformation
End Sub

Application.Wait 줄은 전송 간 2초 지연을 적용하여 대량 전송 시 Outlook의 속도 제한이나 스팸 필터 트리거를 방지합니다. On Error Resume Next와 Nothing 검사를 통한 오류 처리는 Outlook이 아직 실행되지 않은 경우를 우아하게 처리합니다.

더 나은 VBA 코드를 위한 프롬프트 엔지니어링

ChatGPT 생성 VBA의 품질은 요청 방식에 크게 좌우됩니다. 다음 구조화된 접근법을 사용하세요:

  1. 트리거 정의: "버튼 클릭 시 실행" vs "통합 문서 열 때 자동 실행" vs "선택 범위에 실행".
  2. 데이터 위치 지정: "A열 A2부터 고객 이름, B열에 이메일 주소가 있습니다."
  3. 정확한 결과 설명: "각 행에 대해 고객 이름으로 새 워크시트를 만들고 해당 데이터를 복사합니다."
  4. 오류 처리 요구사항 명시: "이메일 주소가 없는 행은 오류를 표시하지 않고 건너뜁니다."
  5. 제약 조건 언급: "통합 문서에 50,000행이 있으므로 속도에 최적화하세요" 또는 "Windows의 Excel 2016에서 작동해야 합니다."

프로 팁: 복잡한 매크로의 경우 요청을 더 작은 조각으로 나누세요. 먼저 메인 루프 구조를 요청한 다음 각 서브루틴을 별도로 요청하세요. ChatGPT에 작성 중 주석을 추가하도록 요청하면 디버깅이 훨씬 쉬워집니다.

AI 생성 VBA 코드 디버깅

AI 생성 매크로가 처음부터 완벽하게 작동하는 경우는 드뭅니다. 다음은 체계적인 디버깅 워크플로입니다:

  1. 먼저 컴파일: VBA 편집기에서 디버그 > VBAProject 컴파일로 이동합니다. 이렇게 하면 런타임 전에 구문 오류, 선언되지 않은 변수, 누락된 참조를 잡아냅니다.
  2. Option Explicit 추가: 생성된 코드의 모듈 상단에 Option Explicit이 없으면 추가하세요. 이렇게 하면 변수 선언이 강제되고 변수 이름의 오타를 잡아냅니다.
  3. 중단점 사용: 줄 왼쪽 여백을 클릭하여 중단점을 설정한 다음 F8을 눌러 한 줄씩 실행합니다. 변수 위에 마우스를 올리면 현재 값을 확인할 수 있습니다.
  4. Debug.Print 문 추가: 전략적 지점에 Debug.Print "행: " & i & " 값: " & Cells(i,1).Value를 삽입하여 실행 흐름을 추적합니다.
  5. 오류를 ChatGPT에 다시 붙여넣기: 정확한 오류 메시지와 줄 번호를 복사한 다음 "12행에서 'Runtime error 1004: Application-defined or object-defined error'가 발생했습니다. 전체 코드입니다. 원인이 무엇인가요?"라고 묻습니다. AI는 구체적인 오류 피드백을 받으면 스스로 수정할 수 있는 경우가 많습니다.

AI 생성 매크로의 보안 고려사항

VBA 매크로는 파일 시스템, 레지스트리, 네트워크에 대한 전체 액세스 권한을 가집니다. AI 생성 코드는 인터넷에서 다운로드한 코드와 동일한 주의를 기울여 다루세요:

재사용 가능한 VBA 도구 키트 구축

가장 신뢰할 수 있는 AI 생성 매크로를 개인 매크로 통합 문서(Personal.xlsb)에 저장하세요. 이 숨겨진 통합 문서는 Excel을 열 때마다 로드되어 모든 통합 문서에서 매크로를 사용할 수 있게 합니다. 만들려면 간단한 매크로를 기록하고 저장 위치로 "개인 매크로 통합 문서"를 선택하세요. 그런 다음 VBA 편집기를 열고 VBAProject(PERSONAL.XLSB)를 찾아 선별된 매크로가 포함된 모듈을 추가하세요.

매크로를 기능별로 모듈로 구성하세요: 서식 지정용, 데이터 내보내기용, 이메일 자동화용, 워크시트 관리용 각각 하나씩. 사용자 지정 리본 탭(파일 > 옵션 > 리본 사용자 지정)을 추가하고 가장 많이 사용하는 매크로에 버튼을 매핑하여 클릭 한 번으로 액세스할 수 있게 합니다. 시간이 지남에 따라 이 도구 키트는 수십 개의 수동 단계를 대체하고 Excel 프로젝트 전반에 걸쳐 일관성을 보장합니다.

이 문서에 대해 질문이 있거나 오류를 발견하셨나요?