Menu

Tự động hóa việc sắp xếp dữ liệu theo nhiều tiêu chí bằng VBA

Cảnh Danh Hồng 24/03/2026 04:52 255 lượt xem 3 trả lời

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ự:

  1. Theo Tên sản phẩm từ A đến Z.
  2. 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.
  3. 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 Sub

Lư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, Order3 tương ứng với các cột và thứ tự sắp xếp mong muốn.
  • Header:=xlYes nghĩ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é!

4

Tuyệt vời! Việc tự động hóa sắp xếp dữ liệu bằng VBA là một kỹ năng rất hữu ích, đặc biệt với các file lớn. Mình cũng hay gặp tình huống tương tự.

Bạn có thể chia sẻ thêm về đoạn code đó được không? Cụ thể là cách bạn xử lý việc thay đổi tiêu chí sắp xếp một cách linh hoạt như thế nào? Ví dụ, người dùng có thể chọn các cột muốn sắp xếp và thứ tự tăng/giảm ngay trên giao diện không?

Rất mong được xem code của bạn!

2

Mình cũng rất thích thú với đoạn code của bạn về tự động hóa sắp xếp dữ liệu. Cái hay của VBA là nó cho phép mình tùy biến mọi thứ theo ý muốn, rất tiện lợi.

Với kinh nghiệm của mình, đôi khi để sắp xếp linh hoạt hơn, mình hay kết hợp VBA với việc tạo ra một form (UserForm) cho phép người dùng chọn các cột muốn sắp xếp và thứ tự (tăng dần/giảm dần) thông qua các combobox hoặc checkbox. Cách này giúp code gọn gàng hơn và dễ dàng cho người dùng cuối sử dụng mà không cần chỉnh sửa code.

Bạn có áp dụng cách tương tự không, hay có cách nào khác để làm cho việc chọn tiêu chí sắp xếp trở nên trực quan hơn?

5

Hay quá bạn ơi! Mình cũng đang vật lộn với việc sắp xếp dữ liệu thủ công trên những file "khủng". Đoạn code của bạn chắc chắn sẽ giúp ích rất nhiều.

Mình tò mò không biết bạn xử lý các trường hợp dữ liệu trùng lặp như thế nào khi sắp xếp? Có cần thêm bước xử lý riêng cho phần này không nhỉ?

2

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

Đăng nhập Đăng ký