Chào mọi người,
Dạo này công việc của mình liên quan nhiều đến việc tổng hợp và phân tích dữ liệu lớn. Thường thì mình hay dùng PivotTable để làm việc này. Tuy nhiên, với các báo cáo yêu cầu cấu trúc phức tạp, nhiều trường lọc, nhiều giá trị tính toán thì việc tạo thủ công từng cái rất mất thời gian và dễ sai sót.
Mình đã tìm hiểu và thử nghiệm một số đoạn code VBA để tự động hóa việc tạo PivotTable. Kết quả khá khả quan, giúp mình tiết kiệm được kha khá thời gian. Nay chia sẻ lại với mọi người để tham khảo, biết đâu có ai đang cần.
Ví dụ cơ bản:
Giả sử bạn có một bảng dữ liệu nguồn ở Sheet1, và muốn tạo một PivotTable ở Sheet2 với các tùy chỉnh sau:
- Vùng dữ liệu nguồn:
Sheet1!$A$1:$D$100 - Vùng đặt PivotTable:
Sheet2!$A$1 - Trường đưa vào Rows:
'Tên Sản Phẩm' - Trường đưa vào Columns:
'Tháng' - Trường đưa vào Values:
'Doanh Thu'(Sum)
Đoạn code VBA cơ bản có thể trông như thế này:
Sub CreateComplexPivotTable()
Dim wsData As Worksheet
Dim wsPivot As Worksheet
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim DataRange As Range
Set wsData = ThisWorkbook.Sheets("Sheet1")
Set wsPivot = ThisWorkbook.Sheets("Sheet2")
' Xác định vùng dữ liệu nguồn
Set DataRange = wsData.Range("A1:D100")
'Tạo PivotCache
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataRange)
'Tạo PivotTable
Set pt = ptCache.CreatePivotTable(TableDestination:=wsPivot.Range("A1"), TableName:="MyPivotTable")
'Thiết lập các trường
With pt
.PivotFields("Tên Sản Phẩm").Orientation = xlRowField
.PivotFields("Tháng").Orientation = xlColumnField
.PivotFields("Doanh Thu").Orientation = xlDataField
.PivotFields("Doanh Thu").Function = xlSum
End With
MsgBox "Đã tạo PivotTable thành công!"
End SubĐây chỉ là một ví dụ rất đơn giản. Thực tế, bạn có thể thêm các bộ lọc (Filters), thêm nhiều trường vào Rows, Columns, Values, thay đổi cách tính toán (Average, Count, Max, Min...), định dạng báo cáo, thêm Slicer... bằng cách tương tự.
Có ai đã từng tự động hóa việc tạo PivotTable bằng VBA chưa? Chia sẻ thêm kinh nghiệm hoặc các đoạn code hay cho mọi người cùng học hỏi nhé!