목록으로
📊 AI와 비즈니스 - 엑셀

GPT로 엑셀 업무 자동화하기 - AI 활용 실무 프로젝트 완성

매일 반복되는 엑셀 작업! AI로 급여 계산부터 보고서 작성까지 자동화하는 실무 프로젝트를 완성해보세요.

사무용 자동화 워크플로 설계

매일 아침 출근하면 똑같은 작업이 기다리고 있죠. 데이터 정리하고, 보고서 만들고, 이메일 보내고... 반복되는 일들이에요. "이거 자동으로 안 될까?"라는 생각, 한 번쯤 해보셨을 거예요.

이제 정말로 자동화할 수 있습니다! AI와 엑셀을 결합하면 출근부터 퇴근까지의 업무 흐름을 자동화할 수 있어요. 데이터를 수집하고, 분석하고, 보고서를 만들고, 이메일까지 발송하는 모든 과정을 버튼 한 번으로 처리할 수 있습니다.

상상해보세요. 아침 9시에 자동으로 전날 매출 데이터를 모아서, AI가 분석하고, 보고서를 예쁘게 만들어서, 경영진 이메일로 발송하는 거예요. 당신은 그냥 결과만 확인하면 됩니다.

이번 글에서는 실제 업무를 완전 자동화하는 워크플로를 설계하고 구축하는 방법을 알아봅니다. 일일 보고서부터 고객 관리, 재고 관리까지, 바로 적용할 수 있는 자동화 시스템을 단계별로 만들어볼게요.

1. 일일 보고서 자동 생성 워크플로

전체 프로세스

1. 데이터 수집 (여러 파일/시트에서)
2. 데이터 정제 및 검증
3. 집계 및 분석
4. AI로 인사이트 생성
5. 보고서 포맷팅
6. 이메일 자동 발송

AI 프롬프트:

"매일 아침 9시에 자동으로 실행되어
전날 매출 데이터를 수집하고, 분석하고, 보고서를 만들어
이메일로 발송하는 완전 자동화 시스템을 만들어주세요."

AI 생성 VBA:

' ============================================
' 일일 보고서 자동화 마스터 시스템
' ============================================

Sub 일일보고서_마스터()
    Dim startTime As Double
    startTime = Timer

    On Error GoTo ErrorHandler

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False

    ' 1단계: 데이터 수집
    Call 데이터수집

    ' 2단계: 데이터 정제
    Call 데이터정제

    ' 3단계: 집계 및 분석
    Call 데이터분석

    ' 4단계: AI 인사이트
    Call AI인사이트생성

    ' 5단계: 보고서 생성
    Call 보고서생성

    ' 6단계: 이메일 발송
    Call 이메일발송

    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    Dim elapsed As Double
    elapsed = Timer - startTime

    MsgBox "일일 보고서가 생성되고 발송되었습니다." & vbCrLf & _
           "소요 시간: " & Format(elapsed, "0.0") & "초", _
           vbInformation, "작업 완료"

    Exit Sub

ErrorHandler:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True

    MsgBox "오류 발생: " & Err.Description & vbCrLf & _
           "오류 위치: " & Erl, vbCritical
End Sub

' ============================================
' 1단계: 데이터 수집
' ============================================
Sub 데이터수집()
    Dim targetWs As Worksheet
    Dim sourceFolder As String
    Dim fileName As String
    Dim wb As Workbook
    Dim lastRow As Long

    Set targetWs = ThisWorkbook.Sheets("원본데이터")
    targetWs.Cells.Clear

    ' 수집할 폴더 경로
    sourceFolder = ThisWorkbook.Path & "\일일데이터\"

    ' 헤더 작성
    targetWs.Cells(1, 1).Value = "날짜"
    targetWs.Cells(1, 2).Value = "지점"
    targetWs.Cells(1, 3).Value = "제품"
    targetWs.Cells(1, 4).Value = "수량"
    targetWs.Cells(1, 5).Value = "매출액"

    lastRow = 2

    ' 폴더 내 모든 엑셀 파일 처리
    fileName = Dir(sourceFolder & "*.xlsx")

    Do While fileName <> ""
        If fileName <> ThisWorkbook.Name Then
            Set wb = Workbooks.Open(sourceFolder & fileName, ReadOnly:=True)

            ' 데이터 복사
            Dim srcLastRow As Long
            srcLastRow = wb.Sheets(1).Cells(wb.Sheets(1).Rows.Count, "A").End(xlUp).Row

            If srcLastRow > 1 Then
                wb.Sheets(1).Range("A2:E" & srcLastRow).Copy
                targetWs.Cells(lastRow, 1).PasteSpecial xlPasteValues
                lastRow = targetWs.Cells(targetWs.Rows.Count, "A").End(xlUp).Row + 1
            End If

            wb.Close SaveChanges:=False
        End If

        fileName = Dir()
    Loop

    Application.CutCopyMode = False

    Debug.Print "데이터 수집 완료: " & lastRow - 2 & "건"
End Sub

' ============================================
' 2단계: 데이터 정제
' ============================================
Sub 데이터정제()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim deleteCount As Long

    Set ws = ThisWorkbook.Sheets("원본데이터")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' 중복 제거
    ws.Range("A1:E" & lastRow).RemoveDuplicates _
        Columns:=Array(1, 2, 3), _
        Header:=xlYes

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' 데이터 검증 및 이상치 제거
    For i = lastRow To 2 Step -1
        Dim isInvalid As Boolean
        isInvalid = False

        ' 날짜 검증
        If Not IsDate(ws.Cells(i, 1).Value) Then isInvalid = True

        ' 수량 검증 (음수 또는 비정상적으로 큰 값)
        If ws.Cells(i, 4).Value < 0 Or ws.Cells(i, 4).Value > 10000 Then
            isInvalid = True
        End If

        ' 매출액 검증
        If ws.Cells(i, 5).Value < 0 Or ws.Cells(i, 5).Value > 100000000 Then
            isInvalid = True
        End If

        If isInvalid Then
            ws.Rows(i).Delete
            deleteCount = deleteCount + 1
        End If
    Next i

    ' 공백 정리
    For i = 2 To lastRow
        ws.Cells(i, 2).Value = Trim(ws.Cells(i, 2).Value) ' 지점
        ws.Cells(i, 3).Value = Trim(ws.Cells(i, 3).Value) ' 제품
    Next i

    Debug.Print "데이터 정제 완료: " & deleteCount & "건 삭제됨"
End Sub

' ============================================
' 3단계: 데이터 분석
' ============================================
Sub 데이터분석()
    Dim sourceWs As Worksheet
    Dim reportWs As Worksheet
    Dim lastRow As Long

    Set sourceWs = ThisWorkbook.Sheets("원본데이터")
    lastRow = sourceWs.Cells(sourceWs.Rows.Count, "A").End(xlUp).Row

    ' 보고서 시트 준비
    On Error Resume Next
    Set reportWs = Sheets("분석결과")
    If reportWs Is Nothing Then
        Set reportWs = Sheets.Add(After:=sourceWs)
        reportWs.Name = "분석결과"
    Else
        reportWs.Cells.Clear
    End If
    On Error GoTo 0

    ' 1. 전체 요약
    With reportWs
        .Cells(1, 1).Value = "일일 매출 요약"
        .Cells(1, 1).Font.Size = 14
        .Cells(1, 1).Font.Bold = True

        .Cells(3, 1).Value = "분석일자:"
        .Cells(3, 2).Value = Date - 1
        .Cells(3, 2).NumberFormat = "yyyy-mm-dd"

        .Cells(4, 1).Value = "총 거래건수:"
        .Cells(4, 2).Value = lastRow - 1
        .Cells(4, 2).NumberFormat = "#,##0"

        .Cells(5, 1).Value = "총 매출액:"
        .Cells(5, 2).Formula = "=SUM(원본데이터!E:E)"
        .Cells(5, 2).NumberFormat = "#,##0"

        .Cells(6, 1).Value = "평균 거래금액:"
        .Cells(6, 2).Formula = "=AVERAGE(원본데이터!E:E)"
        .Cells(6, 2).NumberFormat = "#,##0"

        .Cells(7, 1).Value = "최대 거래금액:"
        .Cells(7, 2).Formula = "=MAX(원본데이터!E:E)"
        .Cells(7, 2).NumberFormat = "#,##0"
    End With

    ' 2. 지점별 집계
    Call 지점별집계(reportWs)

    ' 3. 제품별 집계
    Call 제품별집계(reportWs)

    ' 4. 전일 대비 분석
    Call 전일대비분석(reportWs)

    Debug.Print "데이터 분석 완료"
End Sub

Sub 지점별집계(reportWs As Worksheet)
    Dim pt As PivotTable
    Dim pc As PivotCache
    Dim sourceWs As Worksheet

    Set sourceWs = ThisWorkbook.Sheets("원본데이터")

    ' 피벗 테이블 생성
    Set pc = ThisWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=sourceWs.UsedRange)

    Set pt = pc.CreatePivotTable( _
        TableDestination:=reportWs.Range("A10"), _
        TableName:="지점별매출")

    With pt
        .PivotFields("지점").Orientation = xlRowField
        .AddDataField .PivotFields("매출액"), "합계", xlSum
        .PivotFields("합계").NumberFormat = "#,##0"
    End With

    reportWs.Cells(9, 1).Value = "지점별 매출"
    reportWs.Cells(9, 1).Font.Bold = True
End Sub

Sub 제품별집계(reportWs As Worksheet)
    Dim pt As PivotTable
    Dim pc As PivotCache
    Dim sourceWs As Worksheet

    Set sourceWs = ThisWorkbook.Sheets("원본데이터")

    Set pc = ThisWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=sourceWs.UsedRange)

    Set pt = pc.CreatePivotTable( _
        TableDestination:=reportWs.Range("D10"), _
        TableName:="제품별매출")

    With pt
        .PivotFields("제품").Orientation = xlRowField
        .AddDataField .PivotFields("수량"), "판매수량", xlSum
        .AddDataField .PivotFields("매출액"), "매출액", xlSum
        .PivotFields("매출액").NumberFormat = "#,##0"
    End With

    reportWs.Cells(9, 4).Value = "제품별 매출"
    reportWs.Cells(9, 4).Font.Bold = True
End Sub

Sub 전일대비분석(reportWs As Worksheet)
    Dim yesterday As Double
    Dim today As Double
    Dim changeRate As Double

    ' 전일 매출 (저장된 값 읽기)
    yesterday = reportWs.Cells(3, 4).Value
    If yesterday = 0 Then yesterday = 100000000 ' 기본값

    ' 금일 매출
    today = reportWs.Cells(5, 2).Value

    ' 증감률
    changeRate = (today - yesterday) / yesterday * 100

    reportWs.Cells(3, 4).Value = today ' 다음번을 위해 저장

    reportWs.Cells(8, 1).Value = "전일 대비:"
    reportWs.Cells(8, 2).Value = Format(changeRate, "+0.0%;-0.0%")

    If changeRate > 0 Then
        reportWs.Cells(8, 2).Font.Color = RGB(0, 176, 80)
    Else
        reportWs.Cells(8, 2).Font.Color = RGB(255, 0, 0)
    End If
End Sub

' ============================================
' 4단계: AI 인사이트 생성
' ============================================
Sub AI인사이트생성()
    Dim reportWs As Worksheet
    Dim summary As String
    Dim insight As String

    Set reportWs = ThisWorkbook.Sheets("분석결과")

    ' 요약 데이터 수집
    summary = "총 매출: " & reportWs.Cells(5, 2).Value & "원" & vbCrLf & _
              "거래건수: " & reportWs.Cells(4, 2).Value & "건" & vbCrLf & _
              "평균 거래금액: " & reportWs.Cells(6, 2).Value & "원" & vbCrLf & _
              "전일 대비: " & reportWs.Cells(8, 2).Value

    ' AI에게 인사이트 요청
    insight = AskGPT( _
        "다음 일일 매출 데이터를 분석하고, " & _
        "경영진에게 보고할 3가지 핵심 인사이트를 작성해줘:" & vbCrLf & summary)

    ' 보고서에 추가
    reportWs.Cells(20, 1).Value = "AI 인사이트"
    reportWs.Cells(20, 1).Font.Bold = True
    reportWs.Cells(20, 1).Font.Size = 12

    reportWs.Cells(21, 1).Value = insight
    reportWs.Cells(21, 1).WrapText = True
    reportWs.Range("A21:F25").Merge
    reportWs.Cells(21, 1).Interior.Color = RGB(217, 225, 242)

    Debug.Print "AI 인사이트 생성 완료"
End Sub

' ============================================
' 5단계: 보고서 생성
' ============================================
Sub 보고서생성()
    Dim reportWs As Worksheet
    Dim chartObj As ChartObject

    Set reportWs = ThisWorkbook.Sheets("분석결과")

    ' 차트 생성
    ' 1. 지점별 매출 차트
    Set chartObj = reportWs.ChartObjects.Add( _
        Left:=reportWs.Range("G2").Left, _
        Top:=reportWs.Range("G2").Top, _
        Width:=350, _
        Height:=250)

    With chartObj.Chart
        .SetSourceData Source:=reportWs.Range("A11:B15")
        .ChartType = xlColumnClustered
        .HasTitle = True
        .ChartTitle.Text = "지점별 매출"
        .HasLegend = False
    End With

    ' 2. 제품별 매출 차트
    Set chartObj = reportWs.ChartObjects.Add( _
        Left:=reportWs.Range("G18").Left, _
        Top:=reportWs.Range("G18").Top, _
        Width:=350, _
        Height:=250)

    With chartObj.Chart
        .SetSourceData Source:=reportWs.Range("D11:E15")
        .ChartType = xlPie
        .HasTitle = True
        .ChartTitle.Text = "제품별 매출 비중"
    End With

    ' 서식 적용
    With reportWs
        .Columns("A:F").AutoFit
        .Range("A1:F1").Interior.Color = RGB(68, 114, 196)
        .Range("A1:F1").Font.Color = RGB(255, 255, 255)
    End With

    Debug.Print "보고서 생성 완료"
End Sub

' ============================================
' 6단계: 이메일 발송
' ============================================
Sub 이메일발송()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim reportWs As Worksheet
    Dim emailBody As String

    Set reportWs = ThisWorkbook.Sheets("분석결과")

    ' 이메일 본문 작성
    emailBody = "<html><body>" & _
                "<h2>일일 매출 보고서</h2>" & _
                "<p><b>분석일자:</b> " & reportWs.Cells(3, 2).Value & "</p>" & _
                "<p><b>총 매출액:</b> " & Format(reportWs.Cells(5, 2).Value, "#,##0") & "원</p>" & _
                "<p><b>거래건수:</b> " & Format(reportWs.Cells(4, 2).Value, "#,##0") & "건</p>" & _
                "<p><b>전일 대비:</b> " & reportWs.Cells(8, 2).Value & "</p>" & _
                "<hr>" & _
                "<h3>AI 인사이트</h3>" & _
                "<p>" & Replace(reportWs.Cells(21, 1).Value, vbCrLf, "<br>") & "</p>" & _
                "<hr>" & _
                "<p>자세한 내용은 첨부된 보고서를 확인해주세요.</p>" & _
                "</body></html>"

    ' 보고서 파일로 저장
    Dim reportPath As String
    reportPath = ThisWorkbook.Path & "\일일보고서_" & Format(Date, "yyyymmdd") & ".xlsx"

    ThisWorkbook.SaveCopyAs reportPath

    ' Outlook 이메일 발송
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "manager@company.com"
        .CC = "team@company.com"
        .Subject = "일일 매출 보고서 - " & Format(Date - 1, "yyyy-mm-dd")
        .HTMLBody = emailBody
        .Attachments.Add reportPath
        .Send ' 또는 .Display (검토 후 발송)
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

    Debug.Print "이메일 발송 완료"
End Sub

' ============================================
' 자동 실행 스케줄러 설정
' ============================================
Sub 자동실행설정()
    ' 매일 오전 9시에 실행
    Application.OnTime TimeValue("09:00:00"), "일일보고서_마스터"

    MsgBox "매일 오전 9시에 자동으로 일일 보고서가 생성됩니다.", vbInformation
End Sub

Sub 자동실행취소()
    On Error Resume Next
    Application.OnTime TimeValue("09:00:00"), "일일보고서_마스터", , False
    MsgBox "자동 실행이 취소되었습니다.", vbInformation
End Sub

2. 고객 데이터 관리 워크플로

시나리오: 고객 정보를 수집하고, AI로 세분화하고, 맞춤 마케팅 메시지를 생성

Sub 고객관리워크플로()
    ' 1. 신규 고객 데이터 가져오기
    Call 고객데이터수집

    ' 2. 중복 고객 병합
    Call 중복고객병합

    ' 3. AI로 고객 세분화
    Call AI고객세분화

    ' 4. 맞춤 메시지 생성
    Call 맞춤메시지생성

    ' 5. CRM 시스템 업데이트
    Call CRM업데이트

    MsgBox "고객 관리 워크플로가 완료되었습니다.", vbInformation
End Sub

Sub AI고객세분화()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("고객목록")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' AI로 각 고객 프로필 분석
    For i = 2 To lastRow
        Dim customerInfo As String
        Dim segment As String

        customerInfo = "나이: " & ws.Cells(i, 3).Value & _
                      ", 구매횟수: " & ws.Cells(i, 4).Value & _
                      ", 총구매액: " & ws.Cells(i, 5).Value & _
                      ", 최근구매일: " & ws.Cells(i, 6).Value

        segment = AskGPT( _
            "다음 고객 정보를 기반으로 VIP/일반/신규/이탈위험 중 하나로 분류해줘:" & _
            vbCrLf & customerInfo)

        ws.Cells(i, 7).Value = segment
    Next i
End Sub

Sub 맞춤메시지생성()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("고객목록")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow
        Dim customerName As String
        Dim segment As String
        Dim message As String

        customerName = ws.Cells(i, 2).Value
        segment = ws.Cells(i, 7).Value

        message = AskGPT( _
            customerName & "님께 보낼 " & segment & " 고객용 " & _
            "마케팅 메시지를 친근하고 개인화된 톤으로 작성해줘 (50자 이내)")

        ws.Cells(i, 8).Value = message
    Next i
End Sub

3. 재고 관리 자동화 워크플로

Sub 재고관리워크플로()
    ' 1. 현재 재고 확인
    Call 재고현황업데이트

    ' 2. 안전재고 이하 품목 감지
    Call 재고경보확인

    ' 3. AI 수요 예측
    Call AI수요예측

    ' 4. 자동 발주 추천
    Call 자동발주생성

    ' 5. 발주서 이메일 발송
    Call 발주서발송

    MsgBox "재고 관리가 완료되었습니다.", vbInformation
End Sub

Sub AI수요예측()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("재고관리")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow
        Dim productName As String
        Dim salesHistory As String
        Dim forecast As String

        productName = ws.Cells(i, 1).Value

        ' 최근 30일 판매 데이터 수집
        salesHistory = "최근 30일 판매: " & ws.Cells(i, 5).Value & "개"

        forecast = AskGPT( _
            productName & "의 " & salesHistory & _
            "를 기반으로 다음 주 예상 수요량을 숫자로만 답해줘")

        ws.Cells(i, 6).Value = Val(forecast)
    Next i
End Sub

4. 프로젝트 관리 자동화

Sub 프로젝트관리워크플로()
    ' 1. 작업 진행률 업데이트
    Call 작업진행률계산

    ' 2. 지연 작업 감지
    Call 지연작업경보

    ' 3. AI 리스크 분석
    Call AI리스크분석

    ' 4. 주간 보고서 생성
    Call 프로젝트주간보고서

    ' 5. 팀에 공유
    Call 보고서공유

    MsgBox "프로젝트 관리 워크플로가 완료되었습니다.", vbInformation
End Sub

Sub AI리스크분석()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("프로젝트목록")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow
        Dim projectInfo As String
        Dim riskAnalysis As String

        projectInfo = "프로젝트: " & ws.Cells(i, 1).Value & vbCrLf & _
                     "진행률: " & ws.Cells(i, 3).Value & "%" & vbCrLf & _
                     "마감일: " & ws.Cells(i, 4).Value & vbCrLf & _
                     "담당자: " & ws.Cells(i, 5).Value

        riskAnalysis = AskGPT( _
            "다음 프로젝트의 리스크를 분석하고 3가지 주의사항을 알려줘:" & _
            vbCrLf & projectInfo)

        ws.Cells(i, 6).Value = riskAnalysis
        ws.Cells(i, 6).WrapText = True
    Next i
End Sub

5. 통합 자동화 대시보드

Sub 자동화대시보드()
    Dim dashWs As Worksheet

    ' 대시보드 시트 생성
    On Error Resume Next
    Set dashWs = Sheets("자동화대시보드")
    If dashWs Is Nothing Then
        Set dashWs = Sheets.Add
        dashWs.Name = "자동화대시보드"
    Else
        dashWs.Cells.Clear
    End If
    On Error GoTo 0

    With dashWs
        ' 제목
        .Cells(1, 1).Value = "업무 자동화 대시보드"
        .Cells(1, 1).Font.Size = 16
        .Cells(1, 1).Font.Bold = True

        ' 워크플로 버튼들
        Call 버튼생성(dashWs, "C3", "일일 보고서 생성", "일일보고서_마스터")
        Call 버튼생성(dashWs, "C5", "고객 관리", "고객관리워크플로")
        Call 버튼생성(dashWs, "C7", "재고 관리", "재고관리워크플로")
        Call 버튼생성(dashWs, "C9", "프로젝트 관리", "프로젝트관리워크플로")

        ' 설정 버튼
        Call 버튼생성(dashWs, "C12", "자동 실행 설정", "자동실행설정")
        Call 버튼생성(dashWs, "C14", "AI 설정", "AI플러그인설정")
        Call 버튼생성(dashWs, "C16", "API 통계", "API통계표시")

        ' 상태 표시
        .Cells(3, 6).Value = "마지막 실행:"
        .Cells(3, 7).Value = Now
        .Cells(3, 7).NumberFormat = "yyyy-mm-dd hh:mm"

        .Cells(5, 6).Value = "처리된 고객:"
        .Cells(5, 7).Value = "1,234명"

        .Cells(7, 6).Value = "재고 경보:"
        .Cells(7, 7).Value = "3개 품목"
        .Cells(7, 7).Font.Color = RGB(255, 0, 0)

        .Columns("A:H").AutoFit
    End With

    MsgBox "자동화 대시보드가 생성되었습니다.", vbInformation
End Sub

Sub 버튼생성(ws As Worksheet, cellAddress As String, caption As String, macroName As String)
    Dim btn As Button

    Set btn = ws.Buttons.Add( _
        ws.Range(cellAddress).Left, _
        ws.Range(cellAddress).Top, _
        150, 25)

    btn.OnAction = macroName
    btn.Caption = caption
    btn.Font.Bold = True
End Sub

6. 오류 처리 및 로깅 시스템

' 로그 기록 함수
Sub 로그기록(logType As String, message As String)
    Dim logWs As Worksheet
    Dim lastRow As Long

    On Error Resume Next
    Set logWs = Sheets("실행로그")
    If logWs Is Nothing Then
        Set logWs = Sheets.Add
        logWs.Name = "실행로그"
        logWs.Cells(1, 1).Value = "시간"
        logWs.Cells(1, 2).Value = "유형"
        logWs.Cells(1, 3).Value = "내용"
    End If
    On Error GoTo 0

    lastRow = logWs.Cells(logWs.Rows.Count, "A").End(xlUp).Row + 1

    logWs.Cells(lastRow, 1).Value = Now
    logWs.Cells(lastRow, 2).Value = logType
    logWs.Cells(lastRow, 3).Value = message

    ' 로그 색상
    Select Case logType
        Case "성공"
            logWs.Rows(lastRow).Interior.Color = RGB(198, 224, 180)
        Case "경고"
            logWs.Rows(lastRow).Interior.Color = RGB(255, 242, 204)
        Case "오류"
            logWs.Rows(lastRow).Interior.Color = RGB(255, 199, 206)
    End Select
End Sub

' 사용 예시
Sub 예시워크플로()
    On Error GoTo ErrorHandler

    Call 로그기록("정보", "워크플로 시작")

    ' 작업 수행
    Call 데이터수집
    Call 로그기록("성공", "데이터 수집 완료")

    Call 데이터분석
    Call 로그기록("성공", "데이터 분석 완료")

    Exit Sub

ErrorHandler:
    Call 로그기록("오류", "오류 발생: " & Err.Description)
    MsgBox "오류가 발생했습니다. 로그를 확인하세요.", vbCritical
End Sub

7. 성능 모니터링

Function 실행시간측정(macroName As String) As Double
    Dim startTime As Double

    startTime = Timer

    Application.Run macroName

    실행시간측정 = Timer - startTime

    Call 로그기록("성능", macroName & " 실행시간: " & _
                  Format(실행시간측정, "0.00") & "초")
End Function

마무리

완전 자동화된 사무 워크플로 구축:

  • ✅ 일일 보고서 자동 생성 및 발송
  • ✅ 고객/재고/프로젝트 관리 자동화
  • ✅ AI 인사이트로 의사결정 지원
  • ✅ 통합 대시보드로 한눈에 관리
  • ✅ 로깅과 모니터링으로 안정성 확보

이제 엑셀과 AI를 활용한 완전 자동화 사무 시스템을 구축할 수 있습니다. 반복적인 업무에서 벗어나 더 창의적인 일에 집중하세요!