# VBA와 챗GPT를 활용한 PPT 자동화방법 대공개! - 상상력집단은 이렇게 일합니다

## 들어가며

전국 각지의 공공기관, 기업 대상 강의를 진행하면서 

'어디까지 AI를 활용해야 적절한 것일까?' 에 대해 항상 고민하고, 나누고 실천하고 있습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/181422_6m81ItgyRzlS3GTpEf?q=80&s=1280x180&t=outside&f=webp)

시중에 공개된 AI 유료 서비스를 사용하는 것 자체만으로 모든 일을 바로 해낼 수 있을 것 같지만, 

현실적인 한계도 고려해야 합니다.

오늘의 주제가 될 PPT 만들기가 대표적인 예시일 것입니다. 

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/183232_J3XAVgdl0Yt3vajU2V?q=80&s=1280x180&t=outside&f=webp)

많은 시각화 툴들이 소개되고 있지만, 사내 공식행사에 직접 활용해보신 분들의 소감은 어떠신가요?

기대만큼 만족스러우셨나요?

형식과 분량에 제한을 두지 않았을 경우에, 작업시간을 줄여주는 것 자체로는 의미가 있었을 것입니다.

하지만, 내가 원하는 양식에 딱 맞게 작성해주는 PPT를 제작해주는 AI?

지금 단계에선 AI에게 모든걸 부탁하기가 어려운 것이 사실입니다.

AI에게 전달해줄 아이디어가 있더라도, 

인간의 배경지식과 노하우가 적절히 섞이지 않으면 만족스럽지 못한 결과물의 연속일 뿐입니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/211302_1fPiuRL0h6YRx1Z0iK?q=80&s=1280x180&t=outside&f=webp)

내가 원하는 템플릿까지 만들어주는 AI 활용 노하우,

상상력집단이 직접 일하는 방식을 공개해드리겠습니다

# ☎️[기업/관공서를 위한 AI교육 문의(클릭)](https://slashpage.com/alphabet-ai/1q3vdn2pj6krk2xy49pr)

## PPT 템플릿 자동화 6단계

- 1단계: 회사 템플릿 분석

- 2단계: 자동화 가능 영역 식별

- 3단계: 챗GPT 프롬프트 설계

- 4단계: 데이터 연동 

- 5단계: 자동화 실행

- 6단계: 미세 조정

## 1단계. 회사 템플릿 분석

'업무자동화' 라는 말을 들었을 때,

문자 그대로 클릭 한방에 모든 과정을 알아서 다 해주는 것처럼 느껴질 수 있습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/214720_kCK1rO57BNv5fQgxrt?q=80&s=1280x180&t=outside&f=webp)

> 하지만 이것도 일종의 개발 프로젝트로 인식해야 더 빠르고 정확한 결과를 가져올 수 있습니다.
 즉, '**컴퓨터/기계가 이해할 수 있는 방식으로 내가 하려는 말을 전달'**해야 하는 것이죠.
(이 부분은 저희가 다양한 개발 프로젝트를 진행할 때, 수요처 여러분께 늘 사전 설명을 드리고 있습니다.)

ppt 템플릿 작업을 할때도 컴퓨터가 인식할 수 있게 일부 내용은 변형이 필요한데요,

여기서부터 이어지는 내용들은 챗GPT의 도움을 받아서 각자의 파일로 함께 해보시면 

더 쉽고 빠르게 진행됩니다.

실제 저희가 만들고 있는 강의 교안을 토대로 예시를 구성했습니다.

**단계별로 작업하실 수 있는 프롬프트 함께 첨부하겠습니다.**

**※ 템플릿 분석 요청 프롬프트**

```javascript
내가 올린 페이지를 회사용 템플릿으로 활용할거야. VBA 작업을 진행할 때 어떤 영역을 자동화할 수 있는지 분석해줘.
```

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/224610_aZiQ51gk4BjupJsk4Y?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/231956_iEFmL8zDZKYtRsZFJQ?q=80&s=1280x180&t=outside&f=webp)

저는 진짜로 파일에 아무런 변경 작업을 하지 않고, 

GPT를 통해 어떤 작업이 가능한지에 대한 질문으로 시작하고 있습니다.

공용 템플릿이기 때문에 **여러 페이지를 동시에 생성해도 통일성이 있어야 한다**는 전제를 주면서

가능한 것과 불가능한 것을 구별해서 답변을 해주고 있는 것이 보이실 겁니다.

(각자 활용하시는 파일이 다를 것이기 때문에 당연히 결과값도 다르게 나오겠죠?)

## 2단계: 자동화 가능 영역 식별

강의를 통해, 프롬프트로 명령할 수 있는 기초 개념들을 리스트 형태로 소개하고 싶어졌습니다.

그래서 저는 여러 페이지에 걸쳐 표에 삽입할 내용을 자동화하려 하고,

실제로 표 안의 텍스트 입력 영역을 자동화할 수 있는지 파악해보겠습니다. 

**※ 자동화 가능 영역 식별 프롬프트**

```javascript
정리해준 자동화 항목 중, OOO와 OOO를 진행하고 싶어. 내가 첨부한 파일로 자동화 작업을 진행할 때, 실제로 변경할 수 있는 영역은?
```

/코드

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/232041_D4dWOswMszSMIIW7Xe?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/232054_y29SiRfKQYCG2oZogQ?q=80&s=1280x180&t=outside&f=webp)

이미지, 텍스트 박스, 표, 서식, 순서, 복제 등등 다양한 내용에 대한 방법을 소개해주고 있습니다.

저는 나머지 내용은 바꾸지 않고** i) 여러 슬라이드 복제 & ii) 표 내용 다변화 작업**이 필요합니다.

> 작업해야 하는 내용에 따라 엑셀 등 다른 도구와의 활용도 소개해주고 있는데요,**
**이것도 구체적으로 질문해가면서 해결하면 어렵지 않으니**
내가 아는 선에서의 결론을 요구하지 말고, AI가 파악한 영역이 뭔지를 질문으로 캐내봅시다!**

## 3단계: 챗GPT 프롬프트 설계

하고싶은 작업과, AI가 할 수 있는 작업, 그리고 필요한 내용이 무엇인지 확인했으니

그 내용들을 실행시켜주는 VBA 코드를 요청해보겠습니다.

**※ VBA 구조화를 위한 챗GPT 프롬프트 설계**

```javascript
변경 가능한 항목 : A, B
변경 가능한 내용 : a, b
기타 조건 : ccccc

와 같은 형태로 VBA 코드를 만들고 싶어.
  더욱 정확히 만들기 위해 필요한 것은?
```

/코드

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/235722_smuD4L12Cd5GZR0lQi?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250315/235802_zRDW3GZrJg1Qgn3jRC?q=80&s=1280x180&t=outside&f=webp)

이런 식으로 질문만 해도, 예제 VBA 코드를 바로 생성해주고 있습니다.

지금 프롬프트 대비 보충이 필요한 내용들도 설명해주는 것을 확인하실 수 있는데요,

보충이 필요한 내용이 정확히 확인되면 그때부터는 질문보다는 명령 형태의 프롬프트를 써도 좋습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/001313_CuSqjYzKIuwiWovwMg?q=80&s=1280x180&t=outside&f=webp)

```javascript
추가 설정이 필요한 부분 중,
  - 내가 기존 슬라이드에 입력한 내용을 기준으로 관련 분야 지식을 더 추가한 엑셀 파일을 생성
  - 그 엑셀 파일을 생성해서 다운로드하게 만들고, 그 파일을 기반으로 슬라이드 대량 생성하는 vba 코드 생성
  
```

> 원하는 결과가 한번에 나오지 않아도, 당황하지 마세요.
답변을 명령하지 말고, 질문으로 계속 유도하면 조금씩 해결됩니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/001746_LXHQRbg7hiEHvuu6ut?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/002602_hQnl97MdlnDdotPjjy?q=80&s=1280x180&t=outside&f=webp)

사용 방법과 VBA 코드, 실행하는 방법까지 섬세하게 답변해주는 모습을 확인하실 수 있습니다. 

추가 설정 가능한 부분들에 대해서도 조정하시고 싶은 부분이 있다면 추가 프롬프트를 입력하면서 마무리하실 수 있습니다.

## 4단계: 데이터 연동

저처럼 엑셀에 관련 지식을 보관하고 ppt에 연동하는 경우, 이런 결과물을 얻게 됩니다.

```javascript
Sub GenerateSlidesWithAutoFontSize()
    Dim ppt As PowerPoint.Application
    Dim pres As PowerPoint.Presentation
    Dim slideTemplate As PowerPoint.Slide
    Dim newSlide As PowerPoint.Slide
    Dim tblLeft As PowerPoint.Shape
    Dim tblRight As PowerPoint.Shape
    Dim xlApp As Object
    Dim xlWorkbook As Object
    Dim xlSheetModels As Object
    Dim xlSheetFrameworks As Object
    Dim i As Integer, j As Integer
    Dim lastRowModels As Integer, lastRowFrameworks As Integer
    Dim textRange As TextRange
    
    ' 엑셀 파일 열기
    Set xlApp = CreateObject("Excel.Application")
    Set xlWorkbook = xlApp.Workbooks.Open("C:\경로\Expanded_ML_Analysis.xlsx") ' 🔹 엑셀 파일 경로 수정 필수
    Set xlSheetModels = xlWorkbook.Sheets("ML_Models")
    Set xlSheetFrameworks = xlWorkbook.Sheets("Data_Frameworks")

    ' 데이터 개수 확인 (각 시트의 마지막 행 찾기)
    lastRowModels = xlSheetModels.Cells(xlSheetModels.Rows.Count, 1).End(-4162).Row ' xlUp 대신 -4162 사용
    lastRowFrameworks = xlSheetFrameworks.Cells(xlSheetFrameworks.Rows.Count, 1).End(-4162).Row

    ' PPT 파일 열기
    Set ppt = Application
    Set pres = ppt.ActivePresentation

    ' 템플릿 슬라이드 (예: 2번째 슬라이드 사용)
    Set slideTemplate = pres.Slides(2)

    ' 데이터 개수만큼 슬라이드 생성
    For i = 2 To lastRowModels
        slideTemplate.Duplicate
        Set newSlide = pres.Slides(pres.Slides.Count)

        ' 표 찾기
        For Each tblLeft In newSlide.Shapes
            If tblLeft.HasTable Then Exit For
        Next tblLeft

        For Each tblRight In newSlide.Shapes
            If tblRight.HasTable And tblRight.Left > tblLeft.Left Then Exit For
        Next tblRight

        ' 왼쪽 표 (머신러닝 모델) 업데이트
        tblLeft.Table.Cell(2, 1).Shape.TextFrame.TextRange.Text = xlSheetModels.Cells(i, 1).Value ' 모델명
        tblLeft.Table.Cell(2, 2).Shape.TextFrame.TextRange.Text = xlSheetModels.Cells(i, 2).Value ' 설명
        tblLeft.Table.Cell(2, 3).Shape.TextFrame.TextRange.Text = xlSheetModels.Cells(i, 3).Value ' 세부 내용

        ' 오른쪽 표 (데이터 분석 프레임워크) 업데이트
        If i <= lastRowFrameworks Then
            tblRight.Table.Cell(2, 1).Shape.TextFrame.TextRange.Text = xlSheetFrameworks.Cells(i, 1).Value ' 프레임워크명
            tblRight.Table.Cell(2, 2).Shape.TextFrame.TextRange.Text = xlSheetFrameworks.Cells(i, 2).Value ' 설명
            tblRight.Table.Cell(2, 3).Shape.TextFrame.TextRange.Text = xlSheetFrameworks.Cells(i, 3).Value ' 응용 분야
        Else
            ' 연관성이 없으면 빈칸 처리
            tblRight.Table.Cell(2, 1).Shape.TextFrame.TextRange.Text = ""
            tblRight.Table.Cell(2, 2).Shape.TextFrame.TextRange.Text = ""
            tblRight.Table.Cell(2, 3).Shape.TextFrame.TextRange.Text = ""
        End If
        
        ' 📌 폰트 크기 자동 조정 (표 내부의 텍스트 크기 줄이기)
        For Each tblLeft In newSlide.Shapes
            If tblLeft.HasTable Then
                For j = 1 To 3 ' 표의 세 개 열만 조정
                    Set textRange = tblLeft.Table.Cell(2, j).Shape.TextFrame.TextRange
                    textRange.Font.Size = AutoAdjustFontSize(textRange)
                Next j
            End If
        Next tblLeft
        
        For Each tblRight In newSlide.Shapes
            If tblRight.HasTable Then
                For j = 1 To 3
                    Set textRange = tblRight.Table.Cell(2, j).Shape.TextFrame.TextRange
                    textRange.Font.Size = AutoAdjustFontSize(textRange)
                Next j
            End If
        Next tblRight

    Next i

    ' 엑셀 닫기
    xlWorkbook.Close False
    xlApp.Quit
    Set xlApp = Nothing

    MsgBox "슬라이드 생성 완료!", vbInformation
End Sub

' 📌 자동 폰트 크기 조정 함수
Function AutoAdjustFontSize(txtRange As TextRange) As Integer
    Dim maxWidth As Double
    Dim minFontSize As Integer
    Dim fontSize As Integer

    minFontSize = 10 ' 최소 폰트 크기 제한
    fontSize = 24 ' 기본 폰트 크기

    ' 표 셀의 가로 크기 기준으로 폰트 크기 자동 조정
    maxWidth = txtRange.Parent.Width

    Do While txtRange.BoundWidth > maxWidth And fontSize > minFontSize
        fontSize = fontSize - 1
        txtRange.Font.Size = fontSize
    Loop
    
    AutoAdjustFontSize = fontSize
End Function

```

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/004619_VkeHZOPNKJz3Zlj1Kz?q=80&s=1280x180&t=outside&f=webp)

엑셀에 있는 내용을 파워포인트에서 복사 & 붙여넣기 하는 방식의 매크로 코드를 생성한 것입니다.

vba를 통해 새로 만들어지는 슬라이드에 채워넣을 내용도 임의로 맡기는 형태의 프롬프트도 있지만,

참고할 데이터는 미리 확보해서 입력하게 만드는 것이 일을 여러번 하지 않는 방법이므로

엑셀과 PPT의 연결 - 매크로 설정을 더 선호하고 있습니다.

그러면, 사용방법대로 나머지 단계들을 마무리해보겠습니다.

## 5단계: 자동화 실행

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/010037_YMfiFl7owX9CI5pW2g?q=80&s=1280x180&t=outside&f=webp)

이처럼, 고정할 영역을 지정해놓고 → 영역에 들어가야 할 기본지식까지 다운받은 뒤 → 실제 발표자료에도 자동으로 삽입하는 결과물을 확인하실 수 있는데요

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/011446_WAVgAvgHxwMRQbfoPB?q=80&s=1280x180&t=outside&f=webp)

사용 방법대로 VBA 코드를 실행하려고 하는데 아마 중간중간 막히는 부분이 있을 겁니다.

도움말을 확인하면서 차근차근 해결해나가보겠습니다.

매크로와 VBA는 본래 개발 기능을 염두에 두고 만들어졌기 때문에, 

기본 기능으로 설정되지는 않는 경우가 많습니다.

따라서 매크로 기능 활성화를 진행하겠습니다.

> **매크로 기능 활성화 방법

**_i. [파일] - [옵션] 을 통해 설정 창으로 들어온 다음
ii. [리본 사용자 지정] 을 선택
iii. 우측 탭의 [개발도구] 체크_

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/012355_L6UwwU6Vqv4a0opK7D?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/012912_VeEm2fCFRrwrC6bkSM?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/013850_MpPdhmen3M9DCiVORv?q=80&s=1280x180&t=outside&f=webp)

그러면, 이후 보기, 개발도구 탭이 상단에 새로 생겨난 것을 확인하실 수 있습니다.

생성된 VBA 코드와, 데이터를 만들어준 엑셀파일 위치 등 세부설정을 수정하겠습니다.

> **VBA 코드 설정 적용

**_i. [보기] - [매크로] 선택
ii. 매크로 이름 입력 후 [만들기] 선택
iii. 다운로드한 엑셀파일의 경로 수정 _
**iv. 엑셀 파일 형식은 (*.pptm) 으로 수정 > 매크로 지원하는 형식의 PPT**

## 6단계: 미세조정

GPT로 하면 다 쉽다고 말하다가 정작 이 부분에서 많이 어려워하셔서,

'새삼 개발자 분들한테 재촉한게 미안해진다' 고 하시는 분들도 더러 보게 됐습니다 ^^;

그만큼 기초지식이 부족한 상태에서 시작하게 되면 예상못한 어려움이나 변수들이 나타나기 마련입니다.

> **❗ GPT로 하면 쉽다는데 막상 내가 하려니 어려울때! 상상력집단이 도와드리겠습니다.
> **
> 
> 웹,앱 개발
> 업무자동화
> GPTs 설계
> 실무팀, 리더십 대상 맞춤형 학습
> 법인고객을 위한 교육까지!

요청한대로 실행이 안될때의 막판 디버그 작업도 GPT와 함께해보겠습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/014854_tSKfdqFRiI6SSvyz14?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/015305_u020YGcW0Jpnm5VbTn?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/015826_aop8yoWRBRbr4le7p8?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/170400_bx4Aq3lbewKRwcL758?q=80&s=1280x180&t=outside&f=webp)

이렇게 해서 드디어 완성됐습니다!

최종 결과물은, 표로 구성한 다음 1페이지는 템플릿으로 이용 / 2페이지부터 이후 페이지까지 데이터에 해당하는 양만큼 슬라이드를 반복 생성하는 것이었습니다.

생각만큼 쉽게 만들어지지는 않을 수도 있습니다.

제가 AI를 본격적으로 활용하기 이전에 설명해준 다른 자료들을 보고 실습할때도 충돌이 심했던 적이 있기 때문입니다.

> 생성형 AI와의 대화를 성공적으로 이끌기 위해, 제 경험에 기반해 질문의 중요성을 계속 강조드리고 싶습니다. **내가 정말 무언가를 아무것도 모른다 → 어떤 걸 알아야 되나 → 나를 위해 어떤 절차를 설명해줄 수 있나 → 그것을 컴퓨터상에 구현하기 위해서 어떤 언어들이 필요한가** 를 수집하는 과정으로 처음 성공할 때까지의 인내심이 필요합니다.

# ☎️[기업/관공서를 위한 AI교육 문의(클릭)](https://slashpage.com/alphabet-ai/1q3vdn2pj6krk2xy49pr)

## 마무리 및 회고

작업을 진행하면서, VBA 코드로 할 수 있는 부분과 할 수 없는 부분을 모아봤습니다.

| **구분** | **자동화 가능 여부** | **필요한 조치** |
| --- | --- | --- |
| 기본 텍스트 입력 | ✅ 가능 | VBA 코드로 자동 입력 |
| 표 구조 생성 | ✅ 가능 | VBA 코드로 자동 생성 |
| 기본 서식 적용 | ✅ 가능 | VBA 코드로 자동 적용 |
| 텍스트 사이즈 조정 | ❌ 불가능 | 수동으로 각 셀의 내용에 맞게 조정 필요 |
| 텍스트 맞춤 최적화 | ❌ 불가능 | 수동으로 가독성 확인 및 조정 필요 |
| 셀 크기 미세 조정 | ❌ 불가능 | 수동으로 콘텐츠에 맞게 조정 필요 |

그 다음, VBA 코드, 매크로, 코딩이라는 방법이 전혀 통하지 않아 이 작업을 수동으로 진행해야만 한다면

인간이 수작업을 할 때 해야 하는 작업을 순차적으로 설명하게 했습니다.

```javascript
vba 코드, 매크로, python 등이 모두 작동하지 않아 내가 원하는 작업을 모두 수동으로 진행해야 할때, 내가 인간의 손으로 해야 하는 일을 차례대로 설명해줄수 있나?
```

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/170843_1AF8GXLGMGYTICVDyd?q=80&s=1280x180&t=outside&f=webp)

> **사용자 이용 경험에 따라 코딩 지능이 더 뛰어나다고 생각하는 서비스들이 있을 수 있는데,
> 개인적인 경험상 코딩 에러는 Claude와 함께 해결해나갈 때 효율이 좋았습니다.
> 기회가 될 때, 비개발자를 위한 코딩이나 용도별 적절했던 LLM/AI 서비스 추천도 적어보겠습니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20250316/182244_dD1Gqju7KjjGXRx7sp?q=80&s=1280x180&t=outside&f=webp)

이후, 파워포인트, 엑셀에서 매크로 이용을 막는지도 점검해서 정상 작동을 확인했습니다.

**※VBA 정상작동 확인을 위한 최소한의 테스트용 VBA 코드**

```javascript
Sub SafeTest()
    On Error Resume Next
    Dim i As Integer
    
    ' 슬라이드 개수 확인
    MsgBox "프레젠테이션에는 " & ActivePresentation.Slides.Count & "개의 슬라이드가 있습니다."
    
    ' 첫 번째 슬라이드의 도형 개수 확인
    If ActivePresentation.Slides.Count > 0 Then
        MsgBox "첫 번째 슬라이드에는 " & ActivePresentation.Slides(1).Shapes.Count & "개의 도형이 있습니다."
    End If
End Sub

```

/코

저희는 지식/정보를 공유하고 전달하는 역할을 수행하고 있기 때문에,

장표의 템플릿은 유지하면서 리스트 갱신이 필요할 때 이러한 작업을 시도해보고 있습니다.

기존의 서식을 가급적 변경할 필요 없이 만들어두는 것과,

데이터 영역이 1 페이지 내에서 가급적 복잡하게 정의되지 않도록 엑셀 파일을 만드는 것이

쉽고 간편한 자동화의 핵심이라고 할 수 있습니다.

앞으로도 여러분께 더욱 필요한 내용들로 찾아뵙도록 하겠습니다.

# ☎️[기업/관공서를 위한 AI교육 문의(클릭)](https://slashpage.com/alphabet-ai/1q3vdn2pj6krk2xy49pr)

For the site tree, see the [root Markdown](https://slashpage.com/alphabet-ai.md).
