• 최초 작성일: 2017-09-15
  • 최종 수정일: 2026-09-30
  • 조회수: 16 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 238회 - 여러 시트를 PPT로

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

지난 시간에는 워크시트 한 곳의 특정 영역을 PPT 슬라이드로 내보내 보았습니다. 이번에는 한 단계 더 나아가, 통합 문서 안의 여러 시트를 한꺼번에 각각의 슬라이드로 만들어 보겠습니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

통합 문서 내의 모든 시트를 PPT 슬라이드로 보내기

핵심 요약: 여러 시트를 한꺼번에 PPT로 내보내는 ExportSheetsToSlide

ExportSheetsToSlide 프로시저는 통합 문서의 모든 워크시트를 순회하면서, 특정 시트(Preface)를 제외한 나머지 시트의 지정 영역을 각각 새 슬라이드로 내보냅니다.

  • 순회 대상: ActiveWorkbook.Worksheets 전체
  • 제외 시트: If wrkSheet.Name = "Preface" Then 건너뛰기
  • 대상 영역: 각 시트의 B2:G21
  • 결과 안내: 생성된 슬라이드 수를 MsgBox로 표시

여러 시트를 한꺼번에 슬라이드로 내보내기

지난 강좌에서 워크시트 내의 특정 영역을 PPT 슬라이드로 내보내는 것을 해보았습니다. 이번에는 통합 문서 안의 여러 시트에 있는 자료들을 한꺼번에 각각의 슬라이드로 내보내기 해 보겠습니다.

이 코드도 마찬가지로 'Microsoft PowerPoint XX.X Object Library'가 '사용 가능한 참조'로 지정되어 있어야 합니다. <Alt> + <F11> 키를 눌러 '도구 - 참조' 메뉴에서 참조 지정을 먼저 해 주세요.

ExportSheetsToSlide 프로시저 작성하기

표준 모듈에 다음 코드를 입력합니다. For Each ~ Next 문으로 통합 문서의 모든 워크시트를 순회하면서, 'Preface' 시트는 건너뛰고 나머지 시트의 'B2:G21' 영역을 각각 새 슬라이드로 내보냅니다.

Sub ExportSheetsToSlide()

    Dim PPT As PowerPoint.Application
    Dim PPTPresent As PowerPoint.Presentation
    Dim PPTSlide As PowerPoint.Slide
    Dim wrkSheet As Worksheet
    Dim strTarget As String
    Dim strTitle As String
    Dim i As Integer

    Set PPT = New PowerPoint.Application
    Set PPTPresent = PPT.Presentations.Add
    PPT.Visible = True
    strTarget = "B2:G21"

    For Each wrkSheet In ActiveWorkbook.Worksheets
        wrkSheet.Select

        If wrkSheet.Name = "Preface" Then
            ' Doing Nothing
        Else
            strTitle = wrkSheet.Name & " 팀 월별 실적"

            wrkSheet.Range(strTarget).CopyPicture Appearance:=xlScreen, Format:=xlPicture
            Set PPTSlide = PPTPresent.Slides.Add(i + 1, ppLayoutTitleOnly)
            PPTSlide.Select

            PPTSlide.Shapes.Paste.Select
            PPT.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
            PPTSlide.Shapes.Title.TextFrame.TextRange.Text = strTitle
        End If

        i = PPTPresent.Slides.Count
    Next wrkSheet

    Application.Goto Sheets("Preface").Range("A1"), True
    MsgBox i & "장의 슬라이드가 생성되었습니다"

End Sub

코드 설명

If wrkSheet.Name = "Preface" Then 조건으로 강좌 설명이 담긴 Preface 시트는 제외합니다. 나머지 시트는 이름 뒤에 " 팀 월별 실적"을 붙여 슬라이드 제목으로 사용하고, PPTPresent.Slides.Add(i + 1, ...)로 매번 마지막 위치에 슬라이드를 추가합니다. 마지막에는 만들어진 슬라이드 수를 메시지 박스로 알려 줍니다.

코드를 실행하면 '강동', '강서', '강남', '강북' 4개 시트의 내용이 각각의 슬라이드로 옮겨진 것을 확인할 수 있습니다.

실행 결과로 생성된 4장의 파워포인트 슬라이드 — 강동, 강서, 강남, 강북 팀 월별 실적이 각각 삽입된 화면
아이엑셀러

참고: 이미지에 대하여

본문의 실행 결과 이미지는 원본 예제 파일에 포함되어 있던 실제 스크린샷을 그대로 사용했습니다.

언제나 그렇듯, 어떤 개체가 있고 그 개체가 가진 속성과 메서드에는 어떤 것들이 있는지 파악하는 것이 중요합니다. '매크로 기록기'를 이용해 개체·속성·메서드를 파악하고, 도움말을 통해 정리하는 습관을 기르시기 바랍니다.

정리 — ExportSheetsToSlide 프로시저

요소 설명
순회문 For Each wrkSheet In ActiveWorkbook.Worksheets
제외 조건 wrkSheet.Name = "Preface" 인 경우 건너뜀
복사 영역 wrkSheet.Range("B2:G21")
슬라이드 제목 시트 이름 & " 팀 월별 실적"

자주 묻는 질문 (FAQ)

Q1. 특정 시트를 하나 더 제외하고 싶으면 어떻게 하나요?

If wrkSheet.Name = "Preface" Then 조건 부분을 If wrkSheet.Name = "Preface" Or wrkSheet.Name = "제외할시트명" Then 형태로 바꾸면 됩니다.

Q2. 시트마다 복사할 영역이 다르면 어떻게 처리하나요?

코드의 strTarget 변수를 시트별로 다른 값으로 바꿔 주는 로직(예: Select Case 문)을 추가하면 시트마다 다른 영역을 지정할 수 있습니다.

Q3. 슬라이드 순서가 시트 순서와 다르게 나옵니다.

PPTPresent.Slides.Add(i + 1, ...)는 항상 마지막 위치(i는 현재까지 만들어진 슬라이드 수)에 슬라이드를 추가하므로, 워크시트 탭 순서와 Preface를 제외한 순서가 곧 슬라이드 순서가 됩니다. 탭 순서를 원하는 순서로 먼저 정렬해 두세요.

마치며

시트 하나씩 복사해서 붙여넣던 반복 작업을 순회문 하나로 끝낼 수 있다는 게 매크로의 매력이죠. '매크로 기록기'로 개체와 속성을 먼저 파악해 보는 습관을 들이면 응용이 한결 쉬워집니다!