Theo tôi hiểu, bạn có một bộ dữ liệu hàng tháng mà tôi sẽ giả sử kéo dài từ tháng 1 đến tháng 12, với dữ liệu mỗi tháng được liệt kê trong một cột riêng biệt và với một ô tiêu đề. Bạn muốn có thể sắp xếp tập dữ liệu này dựa trên các giá trị lớn nhất đến nhỏ nhất trong một tháng cụ thể, với tháng được chọn bởi một mục nhập vào một ô trong trang tính.
Mặc dù có thể tạo ra một màn hình được sắp xếp của các giá trị trong tập dữ liệu bằng các công thức bảng tính, nhưng chính tập dữ liệu sẽ không được sắp xếp và cần phải được lọc.
Sử dụng VBA sẽ cho phép một cách tiếp cận đơn giản hơn đáng kể có thêm lợi ích là có thể xử lý dữ liệu được lọc.
Tôi giả sử rằng mục nhập của tháng để sắp xếp theo sẽ ở trong ô A1
, đã được đặt tên sort_month
. Dữ liệu, bao gồm một tiêu đề cho tên tháng, nằm trong các cột B
- M
. Phạm vi dữ liệu được đặt tên filtered_data
; trong dữ liệu ví dụ của tôi, đây là phạm vi B1:M25
.
Mã VBA sẽ thực hiện sắp xếp khá ngắn:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("sort_month")) Is Nothing) Then
Dim theMonth As Long
theMonth = month(DateValue("01-" & Range("sort_month").Value & "-1900"))
Range("filtered_data").Sort Key1:=Cells(1, theMonth + 1), _
Order1:=xlDescending, header:=xlYes
End If
End Sub
Chương trình con này sẽ tự động chạy bất cứ khi nào có thay đổi sort_month
(tức là, tế bào A1
). Sẽ hợp lý khi thiết lập xác thực dữ liệu trên ô này để đảm bảo rằng chỉ các tên tháng hợp lệ ("tháng 1", "tháng 2", v.v.) có thể được nhập vào ô này.
Mã không nên được đặt trong một mô-đun VBA tiêu chuẩn, mà thay vào đó nên được gắn vào bảng tính. Có thể truy cập ngăn mã cho trang tính bằng cách nhấp chuột phải vào tab của trang tính và chọn "Xem mã". Mã sau đó có thể được dán vào khung.
Mặc dù nó có thể nằm ngoài nhu cầu của bạn, nhưng bảng có thể sắp xếp có thể dễ dàng thiết lập để sử dụng chung (tức là, không phải nhà phát triển). Phiên bản hiển thị bên dưới có xác thực dữ liệu thả xuống cho mục nhập tháng, định dạng bảng được thêm để dễ đọc và định dạng có điều kiện để làm nổi bật cột sắp xếp.
