Chào mọi người,
Mình thường xuyên phải làm việc với các file Excel chứa lượng dữ liệu lớn và cần sắp xếp theo nhiều tiêu chí khác nhau. Việc sắp xếp thủ công bằng chức năng Sort của Excel đôi khi khá mất thời gian, đặc biệt khi các tiêu chí thay đổi liên tục. Gần đây, mình có tìm hiểu và viết một đoạn code VBA để tự động hóa quá trình này, thấy khá hiệu quả nên muốn chia sẻ lại cho anh em trong diễn đàn.
Giả sử mình có một bảng dữ liệu với các cột như: Tên sản phẩm, Ngày bán, Số lượng, Doanh thu. Mình muốn sắp xếp dữ liệu này theo thứ tự:
- Theo Tên sản phẩm từ A đến Z.
- Nếu Tên sản phẩm trùng nhau, sắp xếp theo Ngày bán từ mới nhất đến cũ nhất.
- Nếu cả Tên sản phẩm và Ngày bán đều trùng nhau, sắp xếp theo Số lượng từ cao xuống thấp.
Đoạn code VBA mình viết như sau:
Sub SapXepDuLieuNhieuTieuChi()
Dim ws As Worksheet
Dim rng As Range
' Đặt tên sheet và vùng dữ liệu cần sắp xếp
Set ws = ThisWorkbook.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet của bạn
Set rng = ws.UsedRange ' Hoặc chỉ định vùng cụ thể, ví dụ: ws.Range("A1:D100")
' Xóa các tiêu chí sắp xếp cũ (nếu có)
rng.Sort Key1:=rng.Cells(1, 1), Order1:=xlAscending, Header:=xlYes
rng.Sort Key1:=rng.Cells(1, 1), Order1:=xlAscending, Key2:=rng.Cells(1, 2), Order2:=xlDescending, Key3:=rng.Cells(1, 3), Order3:=xlDescending, Header:=xlYes
MsgBox "Đã sắp xếp dữ liệu thành công!", vbInformation
End SubLưu ý:
- Bạn cần thay đổi tên sheet và phạm vi vùng dữ liệu cho phù hợp với file của mình.
- Trong ví dụ trên, mình giả định các cột dữ liệu lần lượt là Tên sản phẩm (cột 1), Ngày bán (cột 2), Số lượng (cột 3). Bạn cần điều chỉnh
Key1,Order1,Key2,Order2,Key3,Order3tương ứng với các cột và thứ tự sắp xếp mong muốn. Header:=xlYesnghĩa là dòng đầu tiên của vùng dữ liệu là tiêu đề và sẽ không bị sắp xếp.
Hy vọng đoạn code này sẽ giúp ích cho các bạn trong việc xử lý dữ liệu. Nếu có bất kỳ thắc mắc hay có cách nào tối ưu hơn, mọi người cùng thảo luận nhé!