确定排序标准(Microsoft Excel)
假设一个同事给您一个工作表,该工作表包含27列中的几百行数据。在开始使用数据之前,您可能想知道以前是否对它进行过排序。了解信息不仅可以消除对数据的再利用,还可以使您了解同事认为什么是查看数据的最重要方式。
不幸的是,Excel没有内置的方法来确定用于一系列数据的排序标准。从理论上讲,您可以编写一个宏来检查每列,并查看它是按升序还是降序。这将告诉您是否对单个列进行了排序,但这并不一定意味着整个数据表都由该列进行了排序-巧合的是,该列是按排序顺序进行的,而排序是由其他排序完成的柱。当您开始考虑二级和三级排序时,检查任务变得更加棘手。
但是,您可以尝试做一件事,以确定某个特定的列是否已排序以及它是按升序还是降序排序。 (请记住:这不会告诉您特定的列是否是用于排序的主列,它只会告诉您该列是否已排序。)
宏背后的想法是将列的内容复制到临时工作表两次。例如,如果要签出F列,则宏会将F列复制到临时工作表上的A列和B列。然后宏将按升序对B列进行排序,并将其与A列进行比较。如果已排序和未排序的列相同,则原始列将按升序排列。然后,B列按降序排序,并再次进行比较。同样,如果列相等,则列按降序排列。
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
一旦确定原始列是按升序还是降序,然后将原始工作表中该列的第一个单元格分别设置为黄色或橙色。最后,临时工作表被删除。
可以修改此宏,以便为数据表中的每一列调用一次。为整个表运行宏不会花费那么长时间,但是会提供一个生动的表示,表示各个列是按升序还是降序排序。
当然,任何这样的宏都不是无关紧要的,因此您可能更容易弄清楚如何对数据进行排序,然后从一开始就对数据进行排序。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2395)适用于Microsoft Excel 97、2000、2002和2003。