Nếu bạn nêu cái code đó cũng bỏ đi và nêu 1 code cứng là 1 đánh giá quá thấp đối với người sử dụng, người ta không biết mới hỏi, có người giúp đỡ là quý lắm rồi.
Vấn đề này tôi không muốn tranh luận, nhưng với code đó tôi sẽ ứng biến ngay tức khắc cái người dùng cần mà không cần sửa đổi gì nhiều, còn việc bạn hỏi field nào bỏ vào đâu thì thực là nực cười vì code viết ra để chạy chứ đâu phải rê thả.
Anh Be09 yên tâm là tôi cũng thích nói thẳng và nghe nói thẳng. Và nói thẳng thì không cần tuổi tác, nên dù tôi nhỏ tuổi hơn anh 1 chút tôi cũng nói. Việc tôi nói rằng
"phải tạo pivot table dạng khác, field nào bỏ vào đâu, Sum hay count, ... thì lúc này cái code đó cũng bỏ đi." là có cơ sở, và mong anh phản biện chứ không phải là giận dỗi:
Trong code tạo Pivot table sẽ có những dòng lệnh cơ bản:
1. Gán dữ liệu nguồn:
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Sheets("Data").Range("A3").CurrentRegion.Address)
Nếu cần tạo Pivot table với dữ liệu nguồn khác, thì phải sửa câu lệnh này.
2. Gán trường cần tính toán (Sum, Count, Max) vào Pivot table:
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
"PivotTable3").PivotFields("BALANCE"), "Sum BALANCE", xlSum
a. Nếu không phải Sum mà là Max thì phải sửa code
b. Nếu trường cần tính không phải "BALANCE" mà là trường khác thì phải sửa code
c. Nếu cần tính 2, 3 trường thì phải viết thêm câu lệnh
3. Gán các trường tổng hợp vào RowField, các trường phân tích vào ColumnField, và các trường lọc vào Report Filter:
(Bài của tôi không nói là kéo thả, vì chạy code chứ có kéo thả đâu, nhưng cũng là gán "trường nào vào chỗ nào", bằng tay là kéo thả, bằng code là gán)
With ActiveSheet.PivotTables("PivotTable3").PivotFields("BALANCE")
.Orientation = xlRowField
.Position = 1
End With
- Code của anh gán 3 trường vào Rowfield, nếu cần gán chỉ 1, 2 trường sẽ phải xóa bớt
- Nếu muốn gán 4 trường, sẽ phải viết thêm 1 đoạn.
- Nếu không phải này mà là trường khác, thì phải sửa câu lệnh
- Nếu trong 3 trường, muốn 1 trường gán vào Columnfield, 1 trường vào Rowfield, 1 trường vào Report Filter, thì phải viết lại các câu lệnh
Tóm lại, Code tạo pivot table nhiều lắm thì dùng cho 1 nguồn dữ liệu, và 1 dạng Pivot table. Nếu thay đổi dạng Pivot: hoán vị, chuyển cột/ dòng, thêm bớt trường tính toán, thay đổi dạng tính toán, phải sửa khá nhiều. Anh nói "
ứng biến ngay tức khắc cái người dùng cần mà không cần sửa đổi gì nhiều" thì tôi không tin. Trước đó anh còn nói thế này cơ:
hướng dẫn sẽ dễ dàng hơn mà không cần thay đổi Code.
Không những thế, nếu đổi dữ liệu nguồn với tên field khác, code phải sửa toàn bộ hoặc viết lại từ đầu.
Cái mạnh của công cụ Pivot table là tạo dễ dàng bằng cách kéo thả. Thí dụ tôi có thể tạo PV trong 1 phút với database chuẩn. Còn viết code mất 15 phút (cao thủ viết nhanh), và chỉ xài 1 lần, cho 1 dạng, cho 1 vùng dữ liệu nguồn. Thay đổi thì sửa code 5 phút (nhanh hơn viết). Còn tôi thay đổi dạng, hoán vị, ... chậm cũng chỉ 1 phút.