Dùng VBA trong Excel để tạo và sửa chữa PivotTable -
Chức năng PivotTable là chức năng mạnh của Excel, nó giúp bạn tổng kết số liệu
nhanh một cách kinh ngạc. Chức năng này đầu tiên xuất hiện trong Excel 5.
Tôi cho rằng các bạn đã làm quen với việc tạo và sửa chữa PivotTable bằng cách thủ công
và bài viết này sẽ hướng dẫn dùng VBA để tạo và sửa chữa PivotTable một cách linh động.
Bài viết sử dụng cho Excel 2000.
Giả sử ở sheet1, tôi có khối dữ liệu cần phân tích như Hình1. Khối dữ liệu này gồm các
trường: SalesRep (đại diện bán hàng), Region (Vùng), Month (Tháng), Sales (doanh số
bán).
Trước khi tạo bảng PivotTable như Hình 2, tôi đã chọn Record New Macro... như Hình 3,
để xem đoạn mã được ghi lại như thế nào.
Sau đó tôi vào màn hình VBE bằng
cách nhấn tổ hợp phím Alt + F11. Tôi
vào Module1, thấy được đoạn mã như
sau:
Sub Macro1()
Macro1 Macro
Macro recorded 17/03/2003 by
Duyet
Range("A1:D13").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R13C4").CreatePivotTable TableDestination:=Range("A1"), _
TableName:="PivotTable1"
ActiveSheet.PivotTables("PivotTable1").SmallGrid = False
Hình 3
ActiveSheet.PivotTables("PivotTable1").AddFields RowFields:="SalesRep",
_
ColumnFields:="Month", PageFields:="Region"
ActiveSheet.PivotTables("PivotTable1").PivotFields("Sales").Orientation
Ghi chú:Region
Là trường page trong
PivotTable.SalesRep
Là trường row trong
PivotTable.Month
Là trường column trong
PivotTable.Sales
Là trường data trong
PivotTable sử dụng hàm
Sum
Sub CreatePivotTable()
Dim PTCache As PivotCache
Macro1 khi sử dụng phương thức Add để tạo PivotCache thì
SourceData là "Sheet1!R1C1:R13C4" còn trong đoạn mã tôi viết
là Sheets("Sheet1").Range("A1").CurrentRegion.Address. Ở đây
tôi dùng thuộc tính Current Region, có nghĩa là dữ liệu chúng ta sử
dụng dựa trên vùng hiện tại xung quanh ô A1. Điều này để chắc
chắn thủ tục CreatePivotTable vẫn tiếp tục làm việc tốt khi chúng
ta thêm vào dữ liệu.
Bây giờ giả sử tôi có thêm trường Target (chỉ tiêu) trong khối dữ liệu, và trong PivotTable
tôi sẽ đưa thêm trường target vào đồng thời cũng thêm trường tính toán Variance. Trường
này (Variance) sẽ bằng Sales - Target. Khối dữ liệu mới của tôi như hình 6.
Đoạn mã trong thủ tục CreatePivotTable trên sẽ được thêm như sau (tôi chỉ thêm trong
đoạn With PT ....End With):
With PT
Them cac truong
.PivotFields("Region").Orientation = xlPageField
.PivotFields("Month").Orientation = xlColumnField
.PivotFields("SalesRep").Orientation = xlRowField
.PivotFields("Sales").Orientation = xlDataField