Menu

Tự động hóa việc tạo các bảng biểu (pivot table) phức tạp bằng VBA

Tưởng Huệ Khương 07/06/2026 04:18 524 lượt xem 1 trả lời

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é!

5

Hay quá bạn ơi! Mình cũng đang đau đầu với vụ tạo PivotTable thủ công đây, nhất là mấy báo cáo có nhiều trường lọc với các trường tính toán khác nhau. Tự động hóa bằng VBA là một ý tưởng tuyệt vời. Bạn có thể chia sẻ cụ thể hơn về cách bạn xử lý các trường hợp phức tạp không? Ví dụ như làm sao để code tự động thêm/bớt trường vào vùng Row/Column/Filter/Value một cách linh hoạt?

4

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký