Giúp Lọc dữ liệu với pivot table bằng VBA

Liên hệ QC

Cu Tồ

Tìm đến kiến thức! ꧁༺ Cu Tồ ༻꧂
Tham gia
6/5/20
Bài viết
735
Được thích
347
Chào các bác anh chị trong diễn đàn!
Em có một ví dụ về lọc dữ liệu với Pivot table bằng VBA.lọc kết quả theo điều kiện và kết quả là tổng ạ.phía dưới là file đính kèm và mô tả mong các bác giúp đỡ!
trong file phần dữ liệu em có sử dụng tiếng việt có dấu cái này nếu không thích hợp có thể bỏ dấu đi được ạ
 

File đính kèm

  • test pivottable.xlsx
    14.1 KB · Đọc: 22
Lần chỉnh sửa cuối:
Chào các bác anh chị trong diễn đàn!
Em có một ví dụ về lọc dữ liệu với Pivot table bằng VBA.phí dưới là file đính kèm và mô tả mong các bác giúp đỡ!
trong file phần dữ liệu em có sử dụng tiếng việt có dấu cái này nếu không thích hợp có thể bỏ dấu đi được ạ
Bạn ghi lại macro về việc tạo Pivot Table theo hướng dẫn bên dưới sẽ ra nhé. Lưu ý nên chỉnh Tên Sheet và tiêu đề cột bằng tên không dấu cho dễ thao tác nhé.

 
Upvote 0
Chào các bác anh chị trong diễn đàn!
Em có một ví dụ về lọc dữ liệu với Pivot table bằng VBA.phí dưới là file đính kèm và mô tả mong các bác giúp đỡ!
trong file phần dữ liệu em có sử dụng tiếng việt có dấu cái này nếu không thích hợp có thể bỏ dấu đi được ạ
File .xlsx thì sao có VBA?
cái này bạn dùng Pivot table bình thường, kết hợp với slicer thì chỉ cần 1 pivot table là đủ
 
Upvote 0
Bạn ghi lại macro về việc tạo Pivot Table theo hướng dẫn bên dưới sẽ ra nhé. Lưu ý nên chỉnh Tên Sheet và tiêu đề cột bằng tên không dấu cho dễ thao tác nhé.

vâng e có ghi lại rồi nhưng phần điều kiện này e muốn lấy trực tiếp trên bảng tính thì làm như thế nào ạ
.PivotItems("điều kiện 1").Visible = False
.PivotItems("điều kiện 2").Visible = true
.PivotItems("điều kiện 3").Visible = true
.PivotItems("điều kiện 4").Visible = true
.PivotItems("điều kiện 5").Visible = true
.PivotItems("điều kiện 6").Visible =true
.PivotItems("điều kiện 7").Visible = true
.PivotItems("điều kiện8").Visible = true
.PivotItems("điều kiện 9").Visible = true
.PivotItems("điều kiện 10").Visible = true
Bài đã được tự động gộp:

File .xlsx thì sao có VBA?
cái này bạn dùng Pivot table bình thường, kết hợp với slicer thì chỉ cần 1 pivot table là đủ
tại vì số liệu thì sẽ thay đổi theo ngày còn lọc và điều kiện thì vẫn như thế nên e muốn làm bằng vba để đỡ thao tác bằng tay,và số liệu e chỉ cần là dạng value thôi như trong file thôi ạ
 
Upvote 0
vâng e có ghi lại rồi nhưng phần điều kiện này e muốn lấy trực tiếp trên bảng tính thì làm như thế nào ạ
.PivotItems("điều kiện 1").Visible = False
.PivotItems("điều kiện 2").Visible = true
.PivotItems("điều kiện 3").Visible = true
.PivotItems("điều kiện 4").Visible = true
.PivotItems("điều kiện 5").Visible = true
.PivotItems("điều kiện 6").Visible =true
.PivotItems("điều kiện 7").Visible = true
.PivotItems("điều kiện8").Visible = true
.PivotItems("điều kiện 9").Visible = true
.PivotItems("điều kiện 10").Visible = true
Bài đã được tự động gộp:


tại vì số liệu thì sẽ thay đổi theo ngày còn lọc và điều kiện thì vẫn như thế nên e muốn làm bằng vba để đỡ thao tác bằng tay,và số liệu e chỉ cần là dạng value thôi như trong file thôi ạ
Vậy thì có 2 cách
- Viết code thông qua tạo pivottable và rồi copy value ra vị trí KQ (hình như bạn đang chọn cách này)
- Hoặc viết code lọc luôn (không qua pivot table)

Còn muốn gán giá trị ô thì chỉ cần
..... =Sheet2.Range("A1").Value
là lấy được giá trị A1 ở sheet2
 
Upvote 0
Vậy thì có 2 cách
- Viết code thông qua tạo pivottable và rồi copy value ra vị trí KQ (hình như bạn đang chọn cách này)
- Hoặc viết code lọc luôn (không qua pivot table)

Còn muốn gán giá trị ô thì chỉ cần
..... =Sheet2.Range("A1").Value
là lấy được giá trị A1 ở sheet2
đúng như bác nói ,e chọn cách đầu,vì trình độ của e về vba là vỡ lòng,e có sử dụng record macro nhưng bị vướng ở phần điều kiện là làm sao để thay điều kiện 1,2,3.. bằng các giá trị trong bẳng tính,.
còn cách hai như bác nói thì e thực sự không làm được nên lên đây mong các bác giúp đỡ
 
Upvote 0
đúng như bác nói ,e chọn cách đầu,vì trình độ của e về vba là vỡ lòng,e có sử dụng record macro nhưng bị vứng ở phần điều kiện là làm sao để thay điều kiện 1,2,3.. bằng các giá trị trong bẳng tính,.
còn cách hai như bác nói thì e thực sự không làm được nên lên đây mong các bác giúp đỡ
Vậy thì phải gửi file xlsm của bạn lên đây , có code mọi người mới sửa được
Còn nói chơi xuông thế này thì chỉ có nói qua nói lại kiểu trà đá vỉa hè thôi.
 
Upvote 0
Vậy thì có 2 cách
- Viết code thông qua tạo pivottable và rồi copy value ra vị trí KQ (hình như bạn đang chọn cách này)
- Hoặc viết code lọc luôn (không qua pivot table)

Còn muốn gán giá trị ô thì chỉ cần
..... =Sheet2.Range("A1").Value
là lấy được giá trị A1 ở sheet2
cách thứ hai mà bác nói thì có dễ hơn không bác?vì nó là lọc nhưng kết quả là tính tổng bác ạ
 
Upvote 0
Xem trong file của bạn thì toàn là 1 mã riêng lẻ mà, sao tính tổng, túm lại là nếu đang theo đường 1 thì cứ đường 1 mà đi
e cũng chưa hình dung được cách thứ hai mà bác nói nhưng cách một thì pivot table có chức năng tính tổng luôn ạ? bác cho hỏi với phần điều kiện này thì e muốn nó tương ứng với các ô sheet2 A1,2 trong bảng tính,xong paste vào đúng vùng chứa kết quả thì phần điều kiển này viết như thế nào ạ
.PivotItems("điều kiện 1").Visible = true
và chỉ khác ở phần điều kiện và vùng pase thì có thể dùng vòng lặp được không ạ?
 
Upvote 0
e cũng chưa hình dung được cách thứ hai mà bác nói nhưng cách một thì pivot table có chức năng tính tổng luôn ạ? bác cho hỏi với phần điều kiện này thì e muốn nó tương ứng với các ô sheet2 A1,2 trong bảng tính,xong paste vào đúng vùng chứa kết quả thì phần điều kiển này viết như thế nào ạ
.PivotItems("điều kiện 1").Visible = true
và chỉ khác ở phần điều kiện và vùng pase thì có thể dùng vòng lặp được không ạ?
Tôi không dùng Pivot mà là dùng ADO, bạn chỉnh sửa tên sheet 'Số Liệu' thành 'SoLieu' và Sheet 'Phân Tích' thành 'PhanTich' rồi chèn code sau vào chạy thử nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet2.Range("B29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F1 from [PhanTich$] where F1 is not null) group by F1")
        Sheet2.Range("F29").CopyFromRecordset .Execute("Select F1,Sum(F4) from [SoLieu$] where F2 In (Select F5 from [PhanTich$] where F5 is not null) group by F1")
        Sheet2.Range("J29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F9 from [PhanTich$] where F9 is not null) group by F1")
        Sheet2.Range("N29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F13 from [PhanTich$] where F13 is not null) group by F1")
    End With
End Sub
 
Upvote 0
Tôi không dùng Pivot mà là dùng ADO, bạn chỉnh sửa tên sheet 'Số Liệu' thành 'SoLieu' và Sheet 'Phân Tích' thành 'PhanTich' rồi chèn code sau vào chạy thử nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet2.Range("B29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F1 from [PhanTich$] where F1 is not null) group by F1")
        Sheet2.Range("F29").CopyFromRecordset .Execute("Select F1,Sum(F4) from [SoLieu$] where F2 In (Select F5 from [PhanTich$] where F5 is not null) group by F1")
        Sheet2.Range("J29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F9 from [PhanTich$] where F9 is not null) group by F1")
        Sheet2.Range("N29").CopyFromRecordset .Execute("Select F1,Sum(F3) from [SoLieu$] where F2 In (Select F13 from [PhanTich$] where F13 is not null) group by F1")
    End With
End Sub
1592470499517.png1592470510292.png

bị lỗi rồi bác ạ
 
Upvote 0
e cũng chưa hình dung được cách thứ hai mà bác nói nhưng cách một thì pivot table có chức năng tính tổng luôn ạ? bác cho hỏi với phần điều kiện này thì e muốn nó tương ứng với các ô sheet2 A1,2 trong bảng tính,xong paste vào đúng vùng chứa kết quả thì phần điều kiển này viết như thế nào ạ
.PivotItems("điều kiện 1").Visible = true
và chỉ khác ở phần điều kiện và vùng pase thì có thể dùng vòng lặp được không ạ?
Chú ý tôi đã viết trên
Vậy thì phải gửi file xlsm của bạn lên đây , có code mọi người mới sửa được
Còn nói chơi xuông thế này thì chỉ có nói qua nói lại kiểu trà đá vỉa hè thôi.

Và chọn cách 2 thì học theo HLMT bài 11 cũng là 1 phương án nhé
 
Upvote 0
FIle đã lưu nhưng vẫn không chạy được bác ạ
 

File đính kèm

  • test pivottable1.xlsm
    20.7 KB · Đọc: 11
Upvote 0
Thử lưu file lại rồi chạy code lại nhé bạn
code chỉ chạy trên office 16 bác ạ. office 10 với kingsoft thì không chạy bác ạ
Bài đã được tự động gộp:

Chú ý tôi đã viết trên


Và chọn cách 2 thì học theo HLMT bài 11 cũng là 1 phương án nhé
em đang làm file ví dụ để học bác ạ,e dùng record macro nhưng không được nên lên đây hỏi các bác chứ không có file sẵn áp dụng bác ạ
 
Upvote 0
code chỉ chạy trên office 16 bác ạ. office 10 với kingsoft thì không chạy bác ạ
Bài đã được tự động gộp:


em đang làm file ví dụ để học bác ạ,e dùng record macro nhưng không được nên lên đây hỏi các bác chứ không có file sẵn áp dụng bác ạ
Code của tôi không chạy được với WPS Office, vậy tôi không thể hỗ trợ bạn được rồi.
 
Upvote 0
em đang làm file ví dụ để học bác ạ,e dùng record macro nhưng không được nên lên đây hỏi các bác chứ không có file sẵn áp dụng bác ạ
Vậy bạn tự search (tìm kiếm) vậy sẽ vỡ và học được nhiều vấn đề. Thông cảm tôi thường làm việc thật thực tế, kiểu phải có và trông thấy bột mới gột lên hồ.
 
Lần chỉnh sửa cuối:
Upvote 0
vâng cảm ơn hai bác ạ
 
Upvote 0
Vậy bạn tự search (tìm kiếm) vậy sẽ vỡ và học được nhiều vấn đề. Thông cảm tôi thường làm việc thật thực tế, kiểu phải có và trông thấy bột mới gột lên hồ.
Vâng cũng không phải là em chỉ làm chơi để lên hỏi mà em chưa xây dựng được bản thật,vì em đang tìm hiểu phần này nếu xong thì e mới bắt đầu làm hoàn chỉnh,vì theo hướng bản mà e xây dựng thì sẽ lọc dữ liệu ra như thế
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom