Excel允许您按任意数量的属性对工作表中的数据进行排序。但是,不能从本质上进行排序的一件事是单元格的颜色-至少在没有更新到Excel 2007或更高版本的情况下是这样。对于某些应用程序,这可能是非常方便的功能。

下面的宏SortByColor将根据单元格的格式化颜色对表格进行排序。

Sub SortByColor()

On Error GoTo SortByColor_Err

Dim sRangeAddress As String     Dim sStartCell As String     Dim sEndCell As String     Dim rngSort As Range     Dim rng As Range

Application.ScreenUpdating = False

sStartCell = InputBox("Enter the cell address of the " & _       "top cell in the range to be sorted by color" & _       Chr(13) & "i.e.  'A1'", "Enter Cell Address")



If sStartCell > "" Then         sEndCell = Range(sStartCell).End(xlDown).Address         Range(sStartCell).EntireColumn.Insert         Set rngSort = Range(sStartCell, sEndCell)

For Each rng In rngSort             rng.Value = rng.Offset(0, 1).Interior.ColorIndex         Next         Range(sStartCell).Sort Key1:=Range(sStartCell), _           Order1:=xlAscending, Header:=xlNo, _           Orientation:=xlTopToBottom         Range(sStartCell).EntireColumn.Delete     End If

SortByColor_Exit:

Application.ScreenUpdating = True     Set rngSort = Nothing     Exit Sub

SortByColor_Err:

MsgBox Err.Number & ": " & Err.Description, _       vbOKOnly, "SortByColor"

Resume SortByColor_Exit End Sub

宏的工作原理是首先询问您要排序的范围的起始单元格。这应该是该范围中最顶层的单元格。然后宏将插入一列(只是临时的),可以在其中存储颜色值。然后,它将逐步遍历您指定的起始单元格定义的范围内的每个单元格。

SortByColor假定您的数据表没有标题行。如果是这样,则应更改实际的排序命令。只需将Header:= xlNo更改为Header:= xlYes。

您应注意,SortByColor宏只会根据应用于单元格的显式颜色对单元格进行排序,如果单元格的颜色是条件格式的结果,则不会进行排序。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3122)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: