엑셀 VBA에서 피벗 테이블(Pivot Table) 활용 방법
엑셀 VBA를 사용하여 **피벗 테이블(Pivot Table)**을 생성, 수정, 업데이트하는 방법을 정리합니다.
1. 피벗 테이블 개요
피벗 테이블은 데이터를 요약하고 분석할 수 있는 강력한 기능으로, 특정 필드를 기준으로 그룹화하거나, 합계, 평균 등을 계산하는 데 사용됩니다.
VBA에서는 PivotTable, PivotCache, PivotFields 등의 객체를 사용하여 피벗 테이블을 생성하고 조작할 수 있습니다.
2. 피벗 테이블 생성 방법
(1) 기본 피벗 테이블 생성 (새 워크시트에 추가)
Sub CreatePivotTable()
Dim wsData As Worksheet
Dim wsPivot As Worksheet
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim dataRange As Range
' 원본 데이터 시트 및 범위 설정
Set wsData = ThisWorkbook.Sheets("Data") ' 원본 데이터가 있는 시트
Set dataRange = wsData.Range("A1:D100") ' A1:D100 데이터를 사용
' 피벗 테이블을 삽입할 새 워크시트 추가
Set wsPivot = ThisWorkbook.Sheets.Add
wsPivot.Name = "PivotTableSheet"
' 피벗 캐시 생성 (데이터를 메모리에 로드)
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=dataRange)
' 피벗 테이블 생성
Set pt = ptCache.CreatePivotTable(TableDestination:=wsPivot.Range("A3"), TableName:="MyPivotTable")
' 필드 추가
With pt
.PivotFields("카테고리").Orientation = xlRowField ' 행 필드
.PivotFields("제품명").Orientation = xlColumnField ' 열 필드
.PivotFields("매출액").Orientation = xlDataField ' 값 필드
End With
MsgBox "피벗 테이블이 생성되었습니다!", vbInformation
End Sub
- 원본 데이터 범위: wsData.Range("A1:D100")에서 가져옴.
- 새로운 시트에 피벗 테이블 생성: TableDestination:=wsPivot.Range("A3")
- 행(Row) 필드: 카테고리
- 열(Column) 필드: 제품명
- 값(Data) 필드: 매출액
(2) 기존 워크시트에서 피벗 테이블 생성
기존에 있는 시트에 피벗 테이블을 추가하려면:
Sub CreatePivotInExistingSheet()
Dim wsData As Worksheet
Dim wsPivot As Worksheet
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim dataRange As Range
' 원본 데이터와 피벗 테이블을 넣을 시트 지정
Set wsData = ThisWorkbook.Sheets("Data")
Set wsPivot = ThisWorkbook.Sheets("PivotSheet")
Set dataRange = wsData.Range("A1:D100")
' 기존 워크시트에서 피벗 캐시 생성
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=dataRange)
' 기존 시트의 특정 위치에 피벗 테이블 생성
Set pt = ptCache.CreatePivotTable(TableDestination:=wsPivot.Range("B4"), TableName:="PivotTable2")
' 필드 설정
With pt
.PivotFields("카테고리").Orientation = xlRowField
.PivotFields("매출액").Orientation = xlDataField
End With
MsgBox "피벗 테이블이 기존 시트에 생성되었습니다!", vbInformation
End Sub
3. 피벗 테이블 필드 수정 및 데이터 조작
(1) 데이터 필드 요약 방식 변경 (합계 → 평균)
Sub ChangeDataFieldSummary()
Dim wsPivot As Worksheet
Dim pt As PivotTable
Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet")
Set pt = wsPivot.PivotTables("MyPivotTable")
' 데이터 필드 요약 방식을 평균으로 변경
With pt.PivotFields("매출액")
.Function = xlAverage ' 평균으로 설정
End With
MsgBox "피벗 테이블 요약 방식이 '평균'으로 변경되었습니다.", vbInformation
End Sub
- Function = xlAverage → xlSum(합계), xlCount(개수), xlMax(최대값) 등 변경 가능.
(2) 특정 필드 정렬 및 필터링
Sub FilterPivotField()
Dim wsPivot As Worksheet
Dim pt As PivotTable
Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet")
Set pt = wsPivot.PivotTables("MyPivotTable")
' "카테고리" 필드에서 "전자제품"만 필터링
With pt.PivotFields("카테고리")
.ClearAllFilters ' 기존 필터 제거
.CurrentPage = "전자제품"
End With
MsgBox "필터가 적용되었습니다!", vbInformation
End Sub
- .ClearAllFilters → 기존 필터를 제거하고 특정 값만 필터링.
4. 피벗 테이블 업데이트 및 삭제
(1) 피벗 테이블 업데이트 (데이터 변경 후 새로고침)
Sub RefreshPivotTable()
Dim wsPivot As Worksheet
Dim pt As PivotTable
Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet")
Set pt = wsPivot.PivotTables("MyPivotTable")
' 데이터 업데이트
pt.RefreshTable
MsgBox "피벗 테이블이 업데이트되었습니다!", vbInformation
End Sub
- 원본 데이터가 변경되면 실행하여 반영.
(2) 피벗 테이블 삭제
Sub DeletePivotTable()
Dim wsPivot As Worksheet
Dim pt As PivotTable
Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet")
' 특정 피벗 테이블 삭제
For Each pt In wsPivot.PivotTables
pt.TableRange2.Clear ' 피벗 테이블 삭제
Next pt
MsgBox "피벗 테이블이 삭제되었습니다!", vbInformation
End Sub
- .Clear를 사용하여 테이블을 삭제 가능.
5. 결론
- 피벗 테이블 생성: PivotCaches.Create 및 CreatePivotTable 사용.
- 필드 추가 및 수정: PivotFields("필드명").Orientation = xlRowField 등 사용.
- 데이터 요약 변경: .Function = xlSum, xlAverage, xlCount 등 사용.
- 필터 및 정렬: .ClearAllFilters, .CurrentPage = "필터값" 적용.
- 업데이트 및 삭제: .RefreshTable을 사용하여 새로고침, .Clear로 삭제.
이제 VBA를 활용하여 피벗 테이블을 자동화할 수 있습니다! 🚀
'Excel을 활용한 알고리즘 개발' 카테고리의 다른 글
[Excel을 활용한 알고리즘 개발] 워크시트, 표, 차트, 셀 접근 및 객체 변수 생성 (0) | 2025.03.21 |
---|---|
[Excel을 활용한 알고리즘 개발] 함수와 루틴 선언 및 호출 (0) | 2025.03.21 |
[Excel을 활용한 알고리즘 개발] VBA Script 특징 및 개요 2 (0) | 2025.03.21 |
[Excel을 활용한 알고리즘 개발] 엑셀 스키마 기반 데이터 검증 스크립트 (1) | 2025.02.09 |
[Excel을 활용한 알고리즘 개발] 엑셀 히스토리 테이블 데이터 시트 (0) | 2025.02.09 |