Giả sử rằng một đồng nghiệp cung cấp cho bạn một trang tính có hàng trăm hàng dữ liệu trong 27 cột. Trước khi bắt đầu làm việc với dữ liệu, bạn có thể muốn biết liệu trước đó nó đã được sắp xếp hay chưa. Việc biết thông tin có thể không chỉ loại bỏ nhu cầu sử dụng dữ liệu mà còn giúp bạn biết được điều mà đồng nghiệp của bạn cảm thấy là cách quan trọng nhất để xem dữ liệu.

Thật không may, Excel không có một cách tích hợp để xác định tiêu chí sắp xếp được sử dụng cho một loạt dữ liệu. Về mặt lý thuyết, bạn có thể viết một macro sẽ kiểm tra từng cột và xem nó theo thứ tự tăng dần hay giảm dần. Điều này sẽ cho bạn biết liệu cột đơn đó đã được sắp xếp hay chưa, nhưng điều đó không nhất thiết có nghĩa là toàn bộ bảng dữ liệu đã được sắp xếp theo cột đó — có thể chỉ là trùng hợp khi cột đó theo thứ tự được sắp xếp và việc sắp xếp được thực hiện bởi một số người khác cột. Nhiệm vụ kiểm tra thậm chí còn phức tạp hơn khi bạn bắt đầu xem xét các loại cấp hai và cấp ba.

Tuy nhiên, có một điều bạn có thể thử để xác định xem một cột cụ thể được sắp xếp hay không và liệu nó được sắp xếp theo thứ tự tăng dần hay giảm dần. (Hãy nhớ: điều này sẽ không cho bạn biết liệu cột cụ thể có phải là cột chính được sử dụng để sắp xếp hay không, nó sẽ chỉ cho bạn biết liệu cột đó có được sắp xếp hay không.)

Ý tưởng đằng sau macro là sao chép nội dung của cột vào một trang tính tạm thời, hai lần. Ví dụ: nếu bạn muốn kiểm tra cột F, macro sẽ sao chép cột F sang cột A và B trên trang tính tạm thời. Sau đó, macro sắp xếp cột B theo thứ tự tăng dần và so sánh nó với cột A. Nếu các cột được sắp xếp và không được sắp xếp giống nhau, thì cột ban đầu theo thứ tự tăng dần. Sau đó, cột B được sắp xếp theo thứ tự giảm dần và thực hiện lại so sánh. Một lần nữa, nếu các cột bằng nhau thì cột đó theo thứ tự giảm dần.

Sub TestIfSorted(i)

Dim CColumn as Number     Dim CSheet as String     Dim FlagSort as String

'Identify Current Column and Current Sheet     CColumn = i     CSheet = ActiveSheet.Name     FlagSort = ""



'Add a temporary sheet to test for sorting     Sheets.Add     ActiveSheet.Name = "TempSort"



'Copy CURRENT column to Columns A,B in Current Sheet     Sheets(CSheet).Select     Columns(CColumn).Select     Selection.Copy

Sheets("TempSort").Select     Range("A1").Select     ActiveSheet.Paste     Range("B1").Select     ActiveSheet.Paste     Application.CutCopyMode = False

'In Column C test for equality of Columns A/B     'If Sum in C1=0 then OK otherwise Col A<>Col B     Range("B2").Select     Selection.End(xlDown).Select     Bottom = ActiveCell.Row     Range(Cells(2, 3), Cells(Bottom, 3)).Select     Selection.FormulaArray = "=IF(RC[-2]=RC[-1],0,1)"

Range("C1").Select     ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6535]C)"



'Sort Column B--Ascending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Ascending"



'Sort Column B--Descending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Descending"



If FlagSort = "Ascending" Then         'Color Header on original sheet yellow         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 36     End If

If FlagSort = "Descending" Then         'Color Header on original sheet orange         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 44     End If

'Delete temporary sheet     Sheets("TempSort").Select     ActiveWindow.SelectedSheets.Delete End Sub

Khi đã xác định được cột gốc theo thứ tự tăng dần hay giảm dần, thì ô đầu tiên của cột trong trang tính ban đầu được đặt thành màu vàng hoặc cam tương ứng. Cuối cùng, bảng tính tạm thời bị xóa.

Macro này có thể được sửa đổi để nó được gọi một lần cho mỗi cột trong bảng dữ liệu. Chạy macro cho toàn bộ bảng sẽ không mất nhiều thời gian, nhưng sẽ cung cấp một biểu diễn đầy màu sắc về việc các cột riêng lẻ được sắp xếp theo thứ tự tăng dần hay giảm dần.

Tất nhiên, bất kỳ macro nào như thế này không phải là tầm thường, vì vậy bạn có thể dễ dàng hơn trong việc tìm ra cách bạn muốn sắp xếp dữ liệu và sau đó sắp xếp theo cách đó ngay từ đầu.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (2395) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.