• 최초 작성일: 2001-12-05
  • 최종 수정일: 2026-09-30
  • 조회수: 12 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA로 피벗 테이블 건들기

들어가기 전에

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

눈치가 빠른 분은 짐작하셨을 테지만(앗! 강좌 제목을 보니 눈치가 빠르지 않아도 아실 듯 합니다 ^^), 이번 시간에 살펴볼 내용은 피벗 테이블에 대한 것입니다.

누가 Exceller에게, "Excel은 어떤 점이 다른 스프레드시트에 비해 뛰어납니까?" 라고 질문하신다면, 한 30분 동안 엑셀이 가진 여러 가지 뛰어난 기능과 VBA 엔진, 배열 수식(물론 배열 수식을 최초로 도입한 스프레드시트가 엑셀은 아니지만...) 등에 대해 거품(?)을 물고 설명을 한 다음, 최종적으로 언급하게 될 부분이 바로 "피벗 테이블" 기능이 되지 않을까 생각합니다.

정말이지 엑셀의 피벗 테이블은 그 기능이 Powerful 합니다. 책에서도 언급했듯이, 한마디로 정의하자면 "다이나믹 요약 보고서" 입니다.

흔히 투자를 할 때 ROI(Return On Investment, 투자회수 능력)라는 지표를 따지곤 하는데, 그런 측면에서 보자면 엑셀의 기능들 중에서 ROI가 가장 높은 기능이 바로 피벗 테이블이 아닐까 싶습니다. 배우기도 쉬운 반면, 여러 분야에서 다각도로 응용하기가 그만큼 용이하다는 의미이지요.

앞으로 몇 강좌 동안은 Exceller가 그렇게 좋다고 외치고(?) 다니는 피벗 테이블의 모든 것(… 이라기 보다 Exceller가 아는 범위 내에서의 모든 것!)에 대해 함께 살펴 보도록 하겠습니다. ("피벗 테이블?? 그게 머하는 건데요?" 혹시 이런 분이 계시다면 얼른 X0037, 38, 68, 69, 70 강좌를 읽어보고 다시 오시기 바랍니다)

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

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

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


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

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

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

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

VBA로 피벗 테이블 건들기

핵심 요약: VBA로 피벗 테이블 만들기

매크로 기록기로 만든 코드는 이해하기 어렵기 때문에 PivotCache와 PivotTable 변수를 사용해 필드 방향(Orientation)을 지정하는 간결한 코드로 바꾸어 사용합니다.

  • 1단계: 매크로 기록기로 피벗 테이블을 만들어 기본 코드를 얻습니다.
  • 2단계: PivotCaches.Add와 CreatePivotTable로 캐시와 피벗 테이블을 만듭니다.
  • 3단계: PivotFields의 Orientation으로 필드를 행/열/페이지/데이터에 배치합니다.

Step 1: 예제 데이터와 피벗 테이블

피벗 테이블에 사용할 간단한 예제 테이블(데이터)을 먼저 만들어 둡니다.

예제 데이터 펼쳐 보기 (Branch / BrandName / Month / Sales_AMT)
BranchBrandNameMonthSales_AMT
강동아이오페1월8700
강동아이오페2월500
강동아이오페3월5600
강동라네즈1월2800
강동라네즈2월6100
강동라네즈3월1000
강동마몽드1월6800
강동마몽드2월900
강동마몽드3월1700
강남아이오페1월1300
강남아이오페2월7500
강남아이오페3월300
강남라네즈1월10000
강남라네즈2월300
강남라네즈3월600
강남마몽드1월1400
강남마몽드2월6800
강남마몽드3월1300
영등포아이오페1월7400
영등포아이오페2월8500
영등포아이오페3월1200
영등포라네즈1월600
영등포라네즈2월3300
영등포라네즈3월6200
영등포마몽드1월8600
영등포마몽드2월9500
영등포마몽드3월900
종로아이오페1월4700
종로아이오페2월6000
종로아이오페3월4800
종로라네즈1월5500
종로라네즈2월5400
종로라네즈3월600
종로마몽드1월400
종로마몽드2월400
종로마몽드3월400
동대문아이오페1월5600
동대문아이오페2월5300
동대문아이오페3월4300
동대문라네즈1월2700
동대문라네즈2월6800
동대문라네즈3월7000
동대문마몽드1월2900
동대문마몽드2월4100
동대문마몽드3월1000
경서아이오페1월3400
경서아이오페2월3100
경서아이오페3월7400
경서라네즈1월6300
경서라네즈2월3900
경서라네즈3월6700
경서마몽드1월3500
경서마몽드2월100
경서마몽드3월6900

이 데이터를 가지고 아래와 같은 형태의 피벗 테이블을 만들어 보세요. ("이 데이터를 가지고 피벗 테이블을 어떻게 만드는 건데요?" 이런 분도 얼른 X0037, 38, 68, 69, 70 강좌를 읽어보고 다시 오시기 바랍니다)

지점을 행, 월을 열, 브랜드를 페이지 필드로 하고 판매금액을 데이터로 만든 피벗 테이블 결과 화면
아이엑셀러

Step 2: 매크로 기록기로 코드 만들기

만드시겠지요? 몇 번 연습해 본 다음, 이번에는 "매크로 기록기"를 사용하여 VBA 코드를 자동으로 만들어 보도록 하겠습니다. "도구-매크로-새 매크로 기록" 메뉴를 선택하신 다음, 위와 같은 피벗 테이블을 작성해 보세요. 매크로 기록기는 일종의 녹음기이므로 불필요한 키보드나 마우스 조작은 삼가해야 한다는 것은 아시지요?

제대로 기록을 하였다면 아마 아래와 같은 코드가 자동으로 생성되어져 있을 것입니다. 항상 생각하는 것이지만 엑셀(VBA)은 대단하다는 생각이 듭니다. 마우스로 버튼만 몇 번 딸깍 거렸을 뿐인데, 어떻게 그것을 자동화 시켜주는 것인지…

너무 바쁜 나머지 피벗 테이블을 만들 시간조차 없는 분을 위해 내친 김에 코드까지 만들어 드리도록 하지요. 참 친절도 하다!!!

Sub Macro1()
'
' Macro1 Macro
' Exceller이(가) 2001-12-05에 기록한 매크로
'

'
    Range("A35").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Preface!R34C1:R88C4").CreatePivotTable TableDestination:="", TableName:= _
        "피벗 테이블1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("피벗 테이블1").AddFields RowFields:="Branch", _
        ColumnFields:="Month", PageFields:="BrandName"
    ActiveSheet.PivotTables("피벗 테이블1").PivotFields("Sales_AMT").Orientation = _
        xlDataField
    ActiveWorkbook.ShowPivotTableFieldList = True
End Sub

매크로 기록기를 이용하면 좋긴 한데… 모든 것을 곧이 곧대로 기록하니까 이대로는 뭐가 뭔지 파악하기가 쉽지 않습니다. 따라서 이것을 수정해 주어야 하는데 그러기 위해서는 피벗 테이블을 구성하고 있는 오브젝트나 프로퍼티 등에 대한 기본적인 지식이 좀 필요합니다.

위의 코드 중에서 노란색으로 표기한 다섯 개의 오브젝트(내지는 컬렉션), 즉 PivotCaches, CreatePivotTable, PivotTableWizard, PivotTables, PivotFields에 대해서는 도움말을 반드시 찾아보시기 바랍니다.

Step 3: 좀더 효율적인 코드로

이제 위의 단순 무식한 코드를 좀더 효율적인 코드로 바꾸어 보도록 합니다. VBA에 숙달이 되면 오브젝트의 프로퍼티나 메서드 등이 생각나지 않을 때 잠깐씩 매크로 기록기를 이용하지 위에서와 같은 방법은 사실 잘 사용하지 않습니다(Exceller의 주관적인 판단… ^^).

아래의 버튼을 눌러 보세요.

매크로 기록기를 사용해서 작성한 코드와 동일한 작업을 수행하지요? 코드를 보도록 하지요. 뭔지 모르지만 훨씬 간결하고 잘 이해할 수 있을 것 같은 기분이 드시지요? 이 코드가 위의 코드보다 훨씬 효율적이라고 할 수 있을 것입니다.

Sub CreatePivotTableByExceller()
    Dim pvtPCache As PivotCache
    Dim pvtPTable As PivotTable
    Dim rngStart As Range
    Set rngStart = Sheets("Preface").[A35]

    Set pvtPCache = ActiveWorkbook.PivotCaches.Add _
        (SourceType:=xlDatabase, _
        SourceData:=rngStart.CurrentRegion.Address)
    Worksheets.Add
    Set pvtPTable = pvtPCache.CreatePivotTable _
        (tabledestination:=ActiveSheet.[A3], _
        tablename:="피벗 테이블1")

    With pvtPTable
        .PivotFields("BrandName").Orientation = xlPageField
        .PivotFields("Branch").Orientation = xlRowField
        .PivotFields("Month").Orientation = xlColumnField
        .PivotFields("Sales_AMT").Orientation = xlDataField
    End With
End Sub

코드 자체는 별도의 설명이 필요없을 듯 합니다. 이해가 안되는 부분이 있으면 질문주시기 바랍니다. 다음 시간에는 이 코드를 가지고 좀더 응용을 할 것이니까 잘 살펴보시기 바랍니다. 그리고 한번 보고 휙 집어던지지 말고 잘 보관해 두세요.

오늘은 여기까지…

정리 — 피벗 테이블 VBA 핵심

구분 사용한 코드 역할
캐시 만들기 PivotCaches.Add(SourceType:=xlDatabase, SourceData:=...) 원본 데이터 캐시
피벗 테이블 생성 pvtPCache.CreatePivotTable 피벗 테이블 개체 생성
행 필드 .PivotFields("Branch").Orientation = xlRowField 지점을 행으로
열 필드 .PivotFields("Month").Orientation = xlColumnField 월을 열로
데이터 필드 .PivotFields("Sales_AMT").Orientation = xlDataField 판매금액 집계

자주 묻는 질문 (FAQ)

Q1. 매크로 기록기를 쓰면 되는데 왜 코드를 수정하나요?

매크로 기록기는 모든 것을 곧이곧대로 기록하기 때문에 코드를 파악하기 어렵고 효율적이지 않으므로 오브젝트 변수를 사용해 간결하게 고칩니다.

Q2. 피벗 테이블은 무엇인가요?

한마디로 다이나믹 요약 보고서입니다. 엑셀의 기능 중에서도 배우기 쉽고 다양하게 응용할 수 있어 ROI가 높은 기능입니다.

Q3. 피벗 테이블 코드를 잘 이해하려면 무엇을 봐야 하나요?

PivotCaches, CreatePivotTable, PivotTableWizard, PivotTables, PivotFields 오브젝트와 컬렉션의 도움말을 반드시 참고하시기 바랍니다.

마치며

피벗 테이블은 엑셀에서 ROI가 가장 높은 기능이며, VBA로 다루면 그 활용 범위가 더욱 넓어집니다.