Sử dụng VBA để tách sheet tổng hợp thành nhiều Sheet chi tiết với điều kiện tên chi nhánh

Thực tế trong công việc đôi lúc yêu cầu chúng ta phải lấy ra các thông tin từ dữ liệu tổng hợp theo một hay nhiều điều kiện nhất định nào đó, Hãy cùng Hoc Excel Online tham khảo bài viết này để có thể giải quyết được vấn đề đó.

Tách Sheet tổng hợp thành nhiều Sheet chi tiết với điều kiện tên chi nhánh

Đặt vấn đề

Giả sử bạn có 1 Sheet tổng hợp Doanh thu bán hàng trong tháng 07/2019 của các chi nhánh khác nhau như hình, bây giờ yêu cầu cần lấy ra thông tin về DT_THANG7, CHIET_KHAU của các chi nhánh đó ra các Sheet khác nhau, với tên Sheet là tên chi nhánh.

Xem thêm: Cách tổng hợp dữ liệu từ nhiều sheet trong excel vô cùng đơn giản

Phương pháp thủ công

Chúng ta có thể làm điều đó thủ công bằng cách là lọc ra lần lượt các chi nhánh, sau đó Copy thông tin của chi nhánh vừa lọc đó ra 1 Sheet mới và đổi tên Sheet tương ứng với tên chi nhánh, cách làm như vậy không có gì sai cả.

Nhưng đó là đối với trường hợp chỉ có ít chi nhánh, còn khi danh sách chi nhánh lên tới con số vài trăm, vài ngàn, hay như nước ta có 63 tỉnh thành tương ứng với 63 chi nhánh chẳng hạn thì công việc lọc – Copy – đổi tên Sheet tới 63 lần cũng đã tiêu tốn không ít thời gian của bạn. Vậy có cách nào giải quyết được vấn đề này một cách nhanh chóng hơn ko?, hãy cùng Hoc Excel Online đến với phương pháp sử dụng VBA.

Phương pháp dùng VBA

Để giải quyết được vấn đề này ta cần thực hiện một số công việc sau đây:

Bước 1: Trước tiên thì ta cần biết có bao nhiêu chi nhánh trong danh sách, để làm được điều đó thì đơn giản nhất là bạn vào thẻ Data trên thanh công cụ Ribbon và tìm tới chức năng Remove Duplicates trong nhóm Data Tools, để hiểu rõ hơn về cách làm bạn có thể tham khảo bài viết:

kỹ thuật loại bỏ giá trị trùng lặp trong danh sách Excel.

Ta được danh sách duy nhất các chi nhánh trong vùng E5:E9 như sau:

Bước 2: Lên ý tưởng và tiến hành viết Code VBA

Ý tưởng ở đây cũng giống như ta thao tác làm thủ công, nhưng thay vì làm đi làm lại nhiều lần 1 công việc thì ta sẽ đưa vào vòng lặp để VBA thực hiện thay ta việc đó. Khi đã xác định được vùng chứa dữ liệu tổng hợp trong Sheet TONG_HOP thông qua câu lệnh Range(“a4:c” & lr) với lr là dòng cuối cùng chứa dữ liệu. Các câu lệnh trong vòng lặp For….Next như sau:

  • Set ws = Worksheets.Add(after:=Sheets(Sheets.Count)): Thêm 1 Sheet mới vào vị trí cuối cùng trong bảng tính Excel.
  • rng.AutoFilter field:=1, Criteria1:=cel.Value: AutoFilter cột thứ nhất với điều kiện là tên của từng chi nhánh.
  • rng.SpecialCells(xlCellTypeVisible).Copy ws.Cells(1, 1): Copy kết quả AutoFilter được (chỉ Copy những dòng hiển thị) sang ô A1 của Sheet vừa thêm.
  • ws.Name = cel.Value: Đổi tên Sheet vừa thêm = tên của chi nhánh.
  • ws.UsedRange.EntireColumn.AutoFit: AutoFit vùng có dữ liệu trong Sheet.

Kết thúc vòng lặp chúng ta thực hiện bỏ AutoFilter và các thủ tục giải phóng bộ nhớ cho các biến đối tượng đã khai báo ban đầu.

Kết luận

Như vậy, với VBA chúng ta đã có thể giải quyết được bài toán tách dữ liệu từ 1 Sheet tổng hợp ra các Sheet khác nhau với điều kiện tên chi nhánh, từ đó có thể giúp bạn rút ngắn được khá nhiều thời gian trong công việc.

Ngoài ra, để có thể nâng cao kiến thức về Excel, VBA nhằm tiết kiệm được thời gian, nâng cao hiệu suất  trong công việc bạn có thể tham khảo các khoá học Excel từ cơ bản tới nâng cao, VBA101, VBA201, … của Hoc Excel Online.


VBA101 – Tự động hoá Excel với lập trình VBA cho người mới bắt đầu

VBA201 – Lập trình VBA nâng cao trong Excel


Tác giả: dtnguyen (Nguyễn Đức Thanh)

@ Học Excel Online | DTNguyen.business
· · ·

Khóa học mới xuất bản