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 này sẽ hướng dẫn dùng VBA để tạo và sửa chữa PivotTable một cách linh động.. tượng PivotTable tr
Trang 1Dùng VBA trong Excel
để tạo và sửa chữa
PivotTable
Trang 2Chứ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
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
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
SalesRep (đại diện bán hàng), Region (Vùng), Month (Tháng), Sales (doanh số bán)
Trang 3Trước khi tạo bảng PivotTable như Hình 2, tôi đã chọn Record New Macro như
mã được ghi lại như thế nào
Trang 4Sau đó 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
Hình 3
Trang 5Range("A1:D13").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Sheet1!R1C1:R13C4").CreatePivotTable TableDestination:=Range("A1"), _
TableName:="PivotTable1"
ActiveSheet.PivotTables("PivotTable1").SmallGrid = False
Là trư page trong PivotTable
Là trư row trong
Trang 6c
t
i
v
e
S
h
e
e
t
.PivotTables("PivotTable1").AddFields RowFields:="SalesRep", _
ColumnFields:="Month", PageFields:="Region"
ActiveSheet.PivotTables("PivotTable1").PivotFields("Sales").Orientation = _
PivotTable
Là trư column trong PivotTable
Là trư data trong PivotTable
sử dụng hàm Sum
Trang 7xlDataField
End Sub
Khảo sát đoạn mã đã được ghi:
Để khảo sát đoạn mã trên bạn cần phải biết một số đối tượng liên quan Tất cả các đối t được giải thích trên online help
là tập hợp các đối tượng PivotCache trong đ tượng Workbook
là tập hợp các đối
Trang 8tượng PivotTable trong đ tượng Workbook
là tập hợp các trư trong đ tượng PivotTable
Create PivotTable
một phương thức của đối tượng PivotCache
Trang 9để tạo một PivotTable
sử dụng dữ liệu trong một
PivotCache
Ta có thể viết lại thủ tục trên bằng thủ tục CreatePivotTable (chú ý bạn nhập thủ tục n
module1) sau đây, có thể nó hơi dài nhưng sẽ dễ hiểu hơn, và bạn có thể chạy ch
đâu bằng cách nhấn tổ hợp phím Alt + F8, sau đó chọn thủ tục CreatePivotTable
chọn Run như Hình 4
Trang 10Sub CreatePivotTable()
Dim PTCache As PivotCache
Dim PT As PivotTable
Application.ScreenUpdating = False
Xoa PivotSheet neu no ton tai
On Error Resume Next
Application.DisplayAlerts = False
Sheets("PivotSheet").Delete
On Error GoTo 0
Tao Pivot Cache
Set PTCache = ActiveWorkbook.PivotCaches.Add _ (SourceType:=xlDatabase, _
Trang 11SourceData:=Sheets("Sheet1").Range("A1").CurrentRegion.Address)
Tao worksheet moi va dat ten
Worksheets.Add
ActiveSheet.Name = "PivotSheet"
Tao Pivot Table tu Cache
Set PT = PTCache.CreatePivotTable _
(TableDestination:=Sheets("PivotSheet").Range("A1"), _
TableName:="PivotTable1")
With PT
Trang 12Them cac truong
.PivotFields("Region").Orientation = xlPageField
.PivotFields("Month").Orientation = xlColumnField
.PivotFields("SalesRep").Orientation = xlRowField
.PivotFields("Sales").Orientation = xlRowField
Application.ScreenUpdating = True
End With
End Sub
Trang 13Khi chạy xong thủ tục trên, bạn sẽ được một PivotTable ở sheet2, trong trường hợp n
là PivotSheet (Hình 5)
Nếu chú ý, bạn sẽ thấy sự khác biệt của 2 đoạn mã trên Trong Macro1 khi sử dụng ph thức Add để tạoPivotCache thì SourceData là "Sheet1!R1C1:R13C4" còn trong
làSheets("Sheet1").Range("A1").CurrentRegion.Address Ở đây tôi dùng thuộc tính
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
thủ tục CreatePivotTablevẫ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
thêm trường target vào đồng thời cũng thêm trường tính toán Variance Trường n 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
End With):
With PT
Trang 14Them cac truong
.PivotFields("Region").Orientation = xlPageField .PivotFields("Month").Orientation = xlColumnField .PivotFields("SalesRep").Orientation = xlRowField .PivotFields("Sales").Orientation = xlDataField
.PivotFields("Target").Orientation = xlDataField
Them truong tinh toan
.CalculatedFields.Add "Variance", "=Sales - Target"
.PivotFields("Variance").Orientation = xlDataField
Thay doi caption
.PivotFields("Sum of Sales").Caption = "Sales ($) "
.PivotFields("Sum of Target").Caption = "Target ($) "
Trang 15.PivotFields("Sum of Variance").Caption = "Variance ($) "
End With
Sau khi chạy lại thủ tục trên tôi sẽ được như hình 7
Giả sử bây giờ dữ liệu của tôi gồm 6 tháng (hình 8), tôi muốn đưa thêm cột tổng theo từng 3 tháng
Tôi phải sửa lại đoạn mã của mình như sau:
With PT
Them cac truong
.PivotFields("Region").Orientation = xlPageField
.PivotFields("Month").Orientation = xlColumnField
.PivotFields("SalesRep").Orientation = xlRowField
.PivotFields("Sales").Orientation = xlDataField
.PivotFields("Target").Orientation = xlDataField
Trang 16Them truong tinh toan
.CalculatedFields.Add "Variance", "=Sales - Target"
.PivotFields("Variance").Orientation = xlDataField
Them muc tinh toan
.PivotFields("Month").CalculatedItems.Add "Q1", _
"= thang 1 + thang 2 + thang 3"
.PivotFields("Month").CalculatedItems.Add "Q2", _
"= thang 4 + thang 5 + thang 6"
Di chuyen cac muc tinh toan
Trang 17.PivotFields("Month").PivotItems("Q1").Position = 4
.PivotFields("Month").PivotItems("Q2").Position = 8
Thay doi caption
.PivotFields("Sum of Sales").Caption = "Sales ($) "
.PivotFields("Sum of Target").Caption = "Target ($) "
.PivotFields("Sum of Variance").Caption = "Variance ($) "
End With
Sau khi chạy lại thủ tục CreatePivotTable tôi sẽ được kết quả như Hình 9
Trang 18Vâng, đến đây các bạn thấy đó, nếu chúng ta biết sử dụng VBA thì công việc phân tích dữ liệu sẽ trở nên đơn giản hơn Ngoài ra, ta cũng có thể tạo một PivotTable từ nguồn dữ liệu b
Access chẳng hạn Để lập trình PivotTable được tốt, các bạn nên đọc phần online help
các đối tượng, phương thức, thuộc tính đã đề cập ở trên
Hy vọng rằng bài viết trên sẽ giúp các bạn một phần nào trong công việc