Sắp xếp dữ liệu trong Excel VBA

Sắp xếp dữ liệu trong Excel VBA

Excel có một phương tiện tuyệt vời để sắp xếp một loạt dữ liệu dạng bảng bằng cách sử dụng ruy-băng trên giao diện người dùng Excel và tại một số điểm, bạn có thể sẽ muốn sử dụng chức năng này trong mã VBA của mình. May mắn thay, điều này là rất dễ dàng để làm.

Hộp thoại giao diện người dùng được tìm thấy bằng cách nhấp vào biểu tượng ‘Sắp xếp’ trong nhóm ‘Sắp xếp & Bộ lọc’ của tab ‘Dữ liệu’ trên ruy-băng Excel. Trước tiên, bạn cần chọn một loạt dữ liệu dạng bảng.

Bạn cũng có thể sử dụng Alt-A-S-S để hiển thị hộp thoại cho một loại tùy chỉnh.

Phương pháp sắp xếp đã được cải thiện rất nhiều trong các phiên bản Excel sau này. Loại từng được giới hạn ở ba cấp độ, nhưng giờ đây bạn có thể nhập bao nhiêu cấp độ tùy theo nhu cầu của mình và điều này cũng áp dụng trong VBA.

Bạn có thể kết hợp tất cả các hàm sắp xếp được cung cấp trong hộp thoại Sắp xếp trong Excel vào mã VBA của mình. Chức năng sắp xếp trong Excel nhanh và nhanh hơn bất kỳ thứ gì bạn có thể tự viết trong VBA, vì vậy hãy tận dụng chức năng này.

Lưu ý rằng khi bạn thực hiện sắp xếp trong VBA, các tham số sắp xếp vẫn giữ nguyên trong hộp thoại sắp xếp giao diện người dùng. Chúng cũng được lưu khi sổ làm việc được lưu.

Nếu người dùng chọn cùng một dải dữ liệu dạng bảng và nhấp vào biểu tượng Sắp xếp, họ sẽ thấy tất cả các thông số đã được nhập bằng mã VBA của bạn. Nếu họ muốn thực hiện một loại thiết kế của riêng họ, thì trước tiên họ sẽ phải xóa tất cả các mức sắp xếp của bạn, điều này sẽ rất khó chịu cho họ.

Ngoài ra, nếu bạn không thay đổi các tham số trong mã của mình và dựa vào các giá trị mặc định, bạn có thể thấy rằng người dùng đã thực hiện các thay đổi sẽ phản ánh thông qua sắp xếp VBA của bạn và có thể đưa ra kết quả không mong muốn, có thể rất khó gỡ lỗi .

May mắn thay, có một phương thức Clear trong VBA để thiết lập lại tất cả các tham số sắp xếp để người dùng sẽ thấy một hộp thoại sắp xếp sạch

1 Worksheets ("Sheet1"). Sắp xếp.SortFields.Clear

Bạn nên xóa các tham số sắp xếp trong VBA trước và sau khi hoàn thành việc sắp xếp.

Sử dụng thực tế phương pháp sắp xếp trong VBA

Khi dữ liệu dạng bảng được nhập vào Excel, nó thường theo thứ tự rất ngẫu nhiên. Nó có thể được nhập từ tệp CSV (các giá trị được phân tách bằng dấu phẩy) hoặc nó có thể đến từ một liên kết đến cơ sở dữ liệu hoặc trang web. Bạn không thể dựa vào việc nó nằm trong một thứ tự đã định từ lần nhập này sang lần nhập khác.

Nếu bạn đang trình bày dữ liệu này cho người dùng trong trang tính của mình, người dùng có thể gặp khó khăn khi xem và hiểu một lượng lớn dữ liệu mà xét theo thứ tự thì ở khắp nơi. Họ có thể muốn nhóm dữ liệu hoặc cắt và dán các phần nhất định của nó vào một ứng dụng khác.

Họ cũng có thể muốn xem, ví dụ, nhân viên được trả lương cao nhất hoặc nhân viên có thời gian phục vụ lâu nhất.

Sử dụng phương pháp Sắp xếp trong VBA, bạn có thể đưa ra các tùy chọn để cho phép người dùng dễ dàng sắp xếp.

Dữ liệu mẫu để chứng minh sắp xếp Excel với VBA

Trước tiên, chúng tôi cần nhập một số dữ liệu mẫu vào trang tính để mã có thể chứng minh tất cả các tiện ích có sẵn trong VBA.

Sao chép dữ liệu này vào một trang tính (được gọi là ‘Sheet1’) chính xác như được hiển thị.

Lưu ý rằng các màu nền ô và màu phông chữ khác nhau đã được sử dụng, vì chúng cũng có thể được sử dụng làm thông số sắp xếp. Sắp xếp bằng cách sử dụng màu ô và phông chữ sẽ được trình bày ở phần sau của bài viết. Cũng lưu ý rằng trên ô E3, tên bộ phận đều là chữ thường.

Bạn không cần nội thất ô và màu phông chữ nếu bạn không muốn sử dụng các ví dụ về sắp xếp theo ô và màu phông chữ.

Ghi Macro để sắp xếp VBA

Mã VBA để sắp xếp có thể khá phức tạp và đôi khi có thể là một ý tưởng hay để thực hiện sắp xếp trên giao diện người dùng của Excel và ghi lại một macro để chỉ cho bạn cách mã hoạt động.

Thật không may, chức năng ghi có thể tạo ra một lượng lớn mã vì nó đặt hầu như mọi tham số có sẵn, mặc dù các giá trị mặc định cho nhiều tham số có thể chấp nhận được đối với thao tác sắp xếp của bạn.

Tuy nhiên, nó cung cấp cho bạn một ý tưởng rất tốt về những gì liên quan đến việc viết mã sắp xếp VBA và một lợi thế là mã được ghi sẽ luôn hoạt động cho bạn. Mã của riêng bạn có thể cần kiểm tra và gỡ lỗi để làm cho nó hoạt động bình thường.

Hãy nhớ rằng đối với một thao tác được thực hiện trong VBA, không có tính năng hoàn tác, vì vậy bạn nên tạo một bản sao của dữ liệu dạng bảng vào một trang tính khác trước khi bạn bắt đầu viết mã sắp xếp của mình.

Ví dụ: nếu bạn thực hiện một sắp xếp đơn giản trên dữ liệu mẫu ở trên, sắp xếp theo Nhân viên, bản ghi sẽ tạo ra mã sau:

123456789101112131415161718 Macro phụ1 ()Phạm vi ("A1: E6"). ChọnActiveWorkbook.Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearActiveWorkbook.Worksheets ("Sheet1"). Sort.SortFields.Add2 Key: = Range ("A2: A6"), _SortOn: = xlSortOnValues, Order: = xlAscending, DataOption: = xlSortNormalVới ActiveWorkbook.Worksheets ("Sheet1"). Sắp xếpDải .SetRange ("A1: E6").Header = xlYes.MatchCase = Sai.Orientation = xlTopToBottom.SortMethod = xlPinYin.Ứng dụngKết thúc vớiKết thúc Sub

Đây là một đoạn mã khá lớn và rất nhiều trong số đó là không cần thiết vì các tham số mặc định được sử dụng. Tuy nhiên, nếu bạn bị áp lực về thời gian để hoàn thành một dự án và bạn cần một số mã hoạt động nhanh chóng, bạn có thể dễ dàng dán mã này vào mã VBA của riêng bạn.

Tuy nhiên, nếu bạn muốn làm cho mã của mình dễ hiểu và thanh lịch hơn, thì có các tùy chọn khác.

Mã VBA để phân loại một cấp độ

Nếu bạn muốn sắp xếp mã mẫu chỉ dựa trên Nhân viên như trước đây khi ghi macro, mã rất đơn giản:

1234567 Sub SingleLevelSort ()Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearPhạm vi ("A1: E6"). Sắp xếp Khóa1: = Phạm vi ("A1"), Tiêu đề: = xlYesKết thúc Sub

Điều này dễ hiểu hơn nhiều so với mã được ghi lại vì nó chấp nhận các giá trị mặc định, ví dụ: sắp xếp tăng dần, vì vậy không cần đặt các tham số thành giá trị mặc định. Điều này giả định rằng bạn đã sử dụng câu lệnh ‘Clear’ trước đó.

Phương thức ‘Clear’ được sử dụng ban đầu để đảm bảo rằng mọi tham số sắp xếp cho trang tính đó được đặt trở lại các giá trị mặc định. Người dùng trước đây có thể đã đặt các tham số thành các giá trị khác nhau hoặc một cách sắp xếp trước đó trong VBA có thể đã thay đổi chúng. Điều quan trọng là phải bắt đầu từ vị trí mặc định khi sắp xếp, nếu không bạn có thể dễ dàng nhận được kết quả không chính xác.

Phương thức Clear không đặt lại tham số Header, và bạn nên đưa thông số này vào mã của mình, nếu không, Excel có thể thử và đoán xem có hàng tiêu đề hay không.

Chạy mã này dựa trên dữ liệu mẫu và trang tính của bạn sẽ giống như sau:

Mã VBA để thực hiện sắp xếp nhiều cấp độ

Bạn có thể thêm nhiều cấp độ sắp xếp theo yêu cầu trong mã của mình. Giả sử rằng bạn muốn sắp xếp đầu tiên theo bộ phận và sau đó theo ngày bắt đầu nhưng theo thứ tự tăng dần cho bộ phận và thứ tự giảm dần cho ngày bắt đầu:

12345678 Sub MultiLevelSort ()Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearRange ("A1: E6"). Sắp xếp Key1: = Range ("E1"), Key2: = Range ("C1"), Header: = xlYes, _Order1: = xlAscending, Order2: = xlDescendingKết thúc Sub

Lưu ý rằng bây giờ có hai khóa trong câu lệnh sắp xếp (Key1 và Key2). Trước hết, Key1 (cột Phòng ban E) được sắp xếp và sau đó Key2 (Ngày bắt đầu cột C) được sắp xếp dựa trên cách sắp xếp đầu tiên.

Ngoài ra còn có hai tham số đặt hàng. Order1 liên kết với Key1 (Phòng ban) và Order2 liên kết với Key2 (Ngày bắt đầu). Điều quan trọng là đảm bảo rằng các khóa và đơn đặt hàng được giữ đúng bước với nhau.

Chạy mã này với dữ liệu mẫu và trang tính của bạn sẽ giống như sau:

Cột Phòng ban (E) theo thứ tự tăng dần và cột Ngày bắt đầu (C) theo thứ tự giảm dần.

Hiệu ứng của cách sắp xếp này là đáng chú ý nhất khi nhìn vào Jane Halfacre (hàng 3) và John Sutherland (hàng 4). Cả hai đều thuộc ngành Tài chính nhưng Jane Halfacre bắt đầu trước John Sutherland và ngày tháng được hiển thị theo thứ tự giảm dần.

Nếu phạm vi dữ liệu dạng bảng có thể có độ dài bất kỳ, bạn có thể sử dụng đối tượng usedRange để xác định phạm vi sắp xếp. Điều này sẽ chỉ hoạt động nếu chỉ có dữ liệu dạng bảng trên trang tính vì bất kỳ giá trị nào bên ngoài dữ liệu sẽ cho kết quả không chính xác về số hàng và cột.

1234567 Sub MultiLevelSort ()Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearWorksheets ("Sheet1"). UsedRange.Sort Key1: = Range ("E1"), Key2: = Range ("C1"), Header: = xlYes, _Order1: = xlAscending, Order2: = xlDescendingKết thúc Sub

Điều này ngăn chặn sự cố nếu bạn sử dụng phương thức ‘End (xlDown)’ để xác định phạm vi sắp xếp. Nếu có một ô trống ở giữa dữ liệu, thì bất kỳ thứ gì sau ô trống sẽ không được đưa vào, trong khi usedRange sẽ đi xuống ô hoạt động cuối cùng trong trang tính.

Sắp xếp theo màu ô

Kể từ Excel 2007, việc sắp xếp theo màu nền của ô hiện có thể thực hiện được, điều này mang lại sự linh hoạt rất lớn khi thiết kế mã sắp xếp của bạn trong VBA.

123456789101112 Sub SingleLevelSortByCellColor ()Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearActiveWorkbook.Worksheets ("Sheet1"). Sort.SortFields.Add2 Key: = Range ("A2: A6"), _SortOn: = xlSortOnCellColor, Order: = xlAscending, DataOption: = xlSortNormalVới ActiveWorkbook.Worksheets ("Sheet1"). Sắp xếpDải .SetRange ("A1: E6").Ứng dụngKết thúc vớiKết thúc Sub

Mã này sẽ sắp xếp phạm vi dữ liệu mẫu (A2: A6) dựa trên màu nền của ô. Lưu ý rằng bây giờ có một tham số bổ sung được gọi là ‘SortOn’ có giá trị là ‘xlSortOnCellColor’.

Lưu ý rằng tham số ‘SortOn’ chỉ có thể được sử dụng bởi một đối tượng trang tính chứ không phải bởi một đối tượng phạm vi.

Vì điều này, mã phức tạp hơn so với sắp xếp sử dụng các giá trị ô.

Mã này sử dụng giá trị khóa để sắp xếp bao gồm toàn bộ phạm vi dữ liệu nhưng bạn có thể chỉ định các cột riêng lẻ làm khóa cho sắp xếp màu nền và sử dụng nhiều cấp như được hiển thị trước đó.

Sau khi chạy mã này, trang tính của bạn bây giờ sẽ giống như sau:

Sắp xếp theo màu phông chữ

Chức năng sắp xếp trong Excel VBA cung cấp tính linh hoạt hơn nữa trong đó bạn có thể sắp xếp theo màu phông chữ:

1234567891011121314 Sub SingleLevelSortByFontColor ()Worksheets ("Sheet1"). Sắp xếp.SortFields.ClearActiveWorkbook.Worksheets ("Sheet1"). Sắp xếp.SortFields.Add (Phạm vi ("A2: A6"), _xlSortOnFontColor, xlAscending, xlSortNormal) .SortOnValue.Color = RGB (0, 0, 0)Với ActiveWorkbook.Worksheets ("Sheet1"). Sắp xếpDải .SetRange ("A1: E6").Header = xlYes.Orientation = xlTopToBottom.Ứng dụngKết thúc vớiKết thúc Sub

Mã để sắp xếp theo màu phông chữ phức tạp hơn nhiều so với màu nền của ô. Tham số ‘SortOn’ hiện giữ giá trị của ‘xlSortOnFontColor’.

Lưu ý rằng bạn phải chỉ định hướng là ‘xlTopToBottom’ và bạn phải chỉ định màu để sắp xếp. Điều này được chỉ định trong các thuật ngữ RGB (Đỏ, Xanh lục, Đen) với các giá trị từ 0 đến 255.

Sau khi chạy mã này với dữ liệu mẫu, trang tính của bạn bây giờ sẽ giống như sau:

Sắp xếp bằng cách sử dụng màu sắc trong VBA phức tạp hơn nhiều so với sắp xếp nhiều cấp, nhưng nếu mã sắp xếp của bạn không hoạt động (điều này có thể xảy ra nếu thiếu tham số hoặc bạn nhập mã không chính xác) thì bạn luôn có thể quay lại ghi một macro và tích hợp mã đã ghi vào VBA của bạn.

Sử dụng các tham số khác trong sắp xếp VBA

Có một số tham số tùy chọn mà bạn có thể sử dụng trong mã VBA để tùy chỉnh cách sắp xếp của mình.

Sắp xếp

SortOn chọn cách sắp xếp sẽ sử dụng giá trị ô, màu nền của ô hoặc màu phông chữ của ô. Cài đặt mặc định là Giá trị ô.

1 SortOn = xlSortOnValues

Đặt hàng

Thứ tự chọn xem việc sắp xếp sẽ được thực hiện theo thứ tự tăng dần hay giảm dần. Mặc định là Tăng dần.

1 Order = xlAscending

DataOption

DataOption chọn cách sắp xếp văn bản và số. Tham số xlSortNormal sắp xếp dữ liệu số và dữ liệu văn bản riêng biệt. Tham số xlSortTextAsNumbers xử lý văn bản dưới dạng dữ liệu số cho việc sắp xếp. Mặc định là xlSortNormal.

1 DataOption = xlSortNormal

Tiêu đề

Header chọn xem phạm vi dữ liệu dạng bảng có hàng tiêu đề hay không. Nếu có một hàng tiêu đề, bạn không muốn điều này được đưa vào sắp xếp.

Các giá trị tham số là xlYes, xlNo và xlYesNoGuess. xlYesNoGuess để nó cho Excel để xác định xem có hàng tiêu đề hay không, điều này có thể dễ dẫn đến kết quả không nhất quán. Việc sử dụng giá trị này không được khuyến khích.

Giá trị mặc định là XNo (không có hàng tiêu đề trong dữ liệu). Với dữ liệu đã nhập, thường có một hàng tiêu đề, vì vậy hãy đảm bảo rằng bạn đặt tham số này thành xlYes.

1 Header = xlYes

MatchCase

Tham số này xác định việc sắp xếp có phân biệt chữ hoa chữ thường hay không. Giá trị tùy chọn là Đúng hoặc Sai. Nếu giá trị là Sai, thì các giá trị chữ thường được coi là giống như giá trị chữ hoa. Nếu giá trị là True, thì sắp xếp sẽ hiển thị sự khác biệt giữa giá trị chữ hoa và chữ thường trong sắp xếp. Giá trị mặc định là Sai.

1 MatchCase = Sai

Sự định hướng

Tham số này xác định xem việc sắp xếp sẽ diễn ra xuống dưới qua các hàng hay trên tất cả các cột. Giá trị mặc định là xlTopToBottom (sắp xếp qua các hàng). Bạn có thể sử dụng xlLeftToRight nếu bạn muốn sắp xếp theo hàng ngang. Các giá trị như xlRows và xlColumns không hoạt động cho tham số này.

1 Định hướng = xlTopToBottom

Sắp xếp

Tham số này chỉ được sử dụng để sắp xếp các ngôn ngữ Trung Quốc. Nó có hai giá trị, xlPinYin và xlStroke. xlPinYin là giá trị mặc định.

xlPinYin sắp xếp theo thứ tự sắp xếp theo phiên âm tiếng Trung cho các ký tự. xlStroke sắp xếp theo số lượng nét trong mỗi ký tự.

Nếu bạn ghi lại một macro sắp xếp, tham số này sẽ luôn được bao gồm trong mã và bạn có thể đã tự hỏi ý nghĩa của nó. Tuy nhiên, trừ khi bạn đang xử lý dữ liệu bằng tiếng Trung, nếu không thì nó sẽ ít được sử dụng.

1 SortMethod = xlPinYin

Sử dụng sự kiện nhấp đúp để sắp xếp dữ liệu dạng bảng

Trong tất cả các chức năng mà Microsoft bao gồm trong các phương pháp sắp xếp cho VBA, nó không bao gồm một phương tiện đơn giản để nhấp đúp vào tiêu đề cột và sắp xếp toàn bộ dữ liệu dạng bảng dựa trên cột cụ thể đó.

Đây là một tính năng thực sự hữu ích và rất dễ dàng để viết mã để thực hiện nó.

12345678910111213141516171819202122232425262728293031323334 Private Sub Worksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean)'Giả định được thực hiện rằng dữ liệu bắt đầu tại ô A1'Tạo ba biến để nắm bắt cột mục tiêu đã chọn và cột và hàng tối đa là _'dữ liệu dạng bảngDim Col As Integer, RCol As Long, RRow As Long'Kiểm tra để đảm bảo rằng người dùng đã nhấp đúp vào hàng tiêu đề - hàng 1 nếu không thì thoát khỏi trang phụIf Target.Row 1 then Exit Sub'Chụp các hàng tối đa trong phạm vi dữ liệu dạng bảng bằng cách sử dụng đối tượng' usedRange 'RCol = ActiveSheet.UsedRange.Columns.Count'Chụp các cột tối đa trong phạm vi dữ liệu dạng bảng bằng cách sử dụng đối tượng' usedRange 'RRow = ActiveSheet.UsedRange.Rows.Count'Kiểm tra để đảm bảo rằng người dùng không nhấp đúp vào cột bên ngoài phạm vi dữ liệu dạng bảngIf Target.Column> RCol Then Exit Sub'Chụp cột mà người dùng đã nhấp đúp vàoCol = Target.Column'Xóa các thông số sắp xếp trước đóActiveSheet.Sort.SortFields.Clear'Sắp xếp phạm vi dạng bảng như được xác định bởi các hàng và cột tối đa từ đối tượng' usedRange ''Sắp xếp dữ liệu dạng bảng bằng cách sử dụng cột được người dùng nhấp đúp làm khóa sắp xếpActiveSheet.Range (Cells (1, 1), Cells (RCol, RRow)). Sort Key1: = Cells (1, Col), Header: = xlYes'Chọn ô A1 - điều này để đảm bảo rằng người dùng không bị bỏ lại trong chế độ chỉnh sửa sau khi sắp xếp là _' hoàn thànhActiveSheet.Range ("A1"). ChọnKết thúc Sub

Mã này cần được đặt trong sự kiện nhấp đúp vào trang tính chứa dữ liệu dạng bảng. Bạn thực hiện việc này bằng cách bấm vào tên trang tính trong cửa sổ Project Explorer (góc trên cùng bên trái của màn hình VBE), rồi chọn ‘Trang tính’ trong trình đơn thả xuống đầu tiên trên cửa sổ mã. Chọn ‘BeforeDoubleClick’ trong menu thả xuống thứ hai và sau đó bạn có thể nhập mã của mình.

Lưu ý rằng không có tên, phạm vi hoặc tham chiếu ô nào được mã hóa cứng vào mã này ngoại trừ việc di chuyển con trỏ đến ô A1 ở cuối mã. Mã được thiết kế để lấy tất cả thông tin cần thiết từ tọa độ ô mà người dùng đã nhấp đúp vào và kích thước của phạm vi dữ liệu dạng bảng.

Phạm vi dữ liệu dạng bảng lớn như thế nào không quan trọng. Mã sẽ vẫn lấy tất cả thông tin cần thiết và nó có thể được sử dụng trên dữ liệu được lưu giữ ở bất kỳ đâu trong sổ làm việc của bạn mà không cần phải mã hóa cứng trong các giá trị.

Giả thiết duy nhất được đưa ra là có một hàng tiêu đề trong dữ liệu dạng bảng và phạm vi dữ liệu bắt đầu từ ô A1, nhưng vị trí bắt đầu của phạm vi dữ liệu có thể dễ dàng thay đổi trong mã.

Bất kỳ người dùng nào cũng sẽ rất ấn tượng với chức năng sắp xếp mới này!

Mở rộng chức năng sắp xếp bằng VBA

Microsoft đã cho phép rất linh hoạt trong việc sắp xếp bằng cách sử dụng một loạt các tham số. Tuy nhiên, trong VBA, bạn có thể thực hiện điều này xa hơn.

Giả sử rằng bạn muốn sắp xếp bất kỳ giá trị nào có phông chữ đậm lên đầu dữ liệu của mình. Không có cách nào để thực hiện việc này trong Excel, nhưng bạn có thể viết mã VBA để làm điều đó:

123456789101112131415161718192021222324252627282930313233343536373839404142 Sắp xếp phụByBold ()'Tạo các biến để giữ số lượng hàng và cột cho dữ liệu dạng bảngDim RRow As Long, RCol As Long, N As Long'Tắt cập nhật màn hình để người dùng không thể thấy những gì đang xảy ra - họ có thể thấy _'các giá trị bị thay đổi và tự hỏi tại saoApplication.ScreenUpdating = Sai'Nắm bắt số cột trong phạm vi dữ liệu dạng bảngRCol = ActiveSheet.UsedRange.Columns.Count'Nắm bắt số lượng hàng trong phạm vi dữ liệu dạng bảngRRow = ActiveSheet.UsedRange.Rows.Count'Lặp lại qua tất cả các hàng trong phạm vi dữ liệu dạng bảng bỏ qua hàng tiêu đềĐối với N = 2 để RRow'Nếu một ô có phông chữ đậm thì hãy đặt giá trị 0 đứng đầu so với giá trị ôNếu ActiveSheet.Cells (N, 1) .Font.Bold = True thìActiveSheet.Cells (N, 1) .Value = "0" & ​​ActiveSheet.Cells (N, 1) .ValueKết thúc nếuN tiếp theo'Xóa mọi thông số sắp xếp trước đóActiveSheet.Sort.SortFields.Clear'Sắp xếp phạm vi dữ liệu dạng bảng. Tất cả các giá trị có giá trị 0 đứng đầu sẽ chuyển lên đầuActiveSheet.Range (Cells (1, 1), Cells (RCol, RRow)). Sort Key1: = Cells (1, 1), Header: = xlYes'Lặp lại qua tất cả các hàng trong phạm vi dữ liệu dạng bảng bỏ qua hàng tiêu đềĐối với N = 2 để RRow'Nếu một ô có phông chữ đậm thì hãy xóa giá trị 0 đứng đầu khỏi giá trị ô thành _'khôi phục các giá trị ban đầuNếu ActiveSheet.Cells (N, 1) .Font.Bold = True thìActiveSheet.Cells (N, 1) .Value = Mid (ActiveSheet.Cells (N, 1) .Value, 2)Kết thúc nếuN tiếp theo'Bật lại màn hình cập nhậtApplication.ScreenUpdating = TrueKết thúc Sub

Mã tính toán kích thước của phạm vi dữ liệu dạng bảng bằng cách sử dụng đối tượng ‘usedRange’ và sau đó lặp qua tất cả các hàng bên trong nó. Khi tìm thấy một phông chữ đậm, một số 0 đứng đầu được đặt trước giá trị ô.

Một sự sắp xếp sau đó diễn ra. Vì sắp xếp theo thứ tự tăng dần, bất kỳ thứ gì có số 0 phía trước sẽ lên đầu danh sách.

Sau đó, mã sẽ lặp qua tất cả các hàng và loại bỏ các số 0 ở đầu, khôi phục dữ liệu về các giá trị ban đầu của nó.

Mã này sắp xếp bằng cách sử dụng phông chữ đậm làm tiêu chí, nhưng bạn có thể dễ dàng sử dụng các đặc điểm ô khác theo cách tương tự, ví dụ: phông chữ nghiêng, kích thước điểm của văn bản, phông chữ gạch dưới, tên phông chữ, v.v.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave