第17章 按颜色排序

Excel 2007新增按颜色排序功能,更广泛地满足了用户需求。

按颜色排序和按数值排序在对选区内数据的处理上稍有不同。按数值或者文本排序会对区域内每一个单元格的数据进行比较判断,调整顺序;而按颜色排序是以选中区域中激活的单元格(即背景反白显示的单元格,不管选中多少区域,活动单元格只有一个)颜色为标准,对颜色一致的单元格排在最顶端或者最底端,其余颜色的数据顺序不变,不会将同颜色但分散存放的数据集中在一个区域。

● 实例123按单元格背景颜色对当前列排序

● 实例124按单元格字体颜色对当前列排序

● 实例125按字体颜色扩展排序

实例123 按单元格背景颜色对当前列排序

【技巧说明】 按单元格背景颜色对当前列当前区域排序。

【案例介绍】 将当前列当前区域中数据背景色与当前单元格背景色一致的排在顶端。初始数据如图4.11所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub按单元格背景颜色对当前列已用区域排序 ()
  With ActiveWorkbook.ActiveSheet.Sort
      .SortFields.Clear
      .SortFields.Add(ActiveCell,xlSortOnCellColor,xlAscending,,xlSortNormal)
      .SortOnValue.Color=ActiveCell.Interior.Color
      .SetRange Application.Intersect(ActiveCell.EntireColumn,
          ActiveCell.CurrentRegion)
      .Apply
    End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A7单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,当前区域中与当前单元格A7背景色一致的单元格数据自动移至最顶端,不包括A10∶A14区域,如图4.12所示。

图4.11 待排序的原始数据

图4.12 已按单元格背景颜色排序的数据

提示

本实例参见光盘样本:..\第4部分\实例123.xlsm。

【相关知识说明】

ActiveCell.Interior.Color:当前单元格的背景色。本例中表示排序条件。

实例124 按单元格字体颜色对当前列排序

【技巧说明】 按单元格字体颜色对当前列已用区域进行排序,所选字体颜色排在最底端。

【案例介绍】 将当前列当前区域中数据的字体颜色与当前单元格字体颜色一致的排在底端。初始数据如图4.13所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub按单元格字体颜色对当前列排序且无标题()
  With ActiveWorkbook.ActiveSheet.Sort
        .SortFields.Clear          '清除原排序信息
        .SortFields.Add(ActiveCell,xlSortOnFontColor,xlDescending,,xlSortNormal)
        .SortOnValue.Color=ActiveCell.Font.Color
      .SetRange Application.Intersect(ActiveCell.EntireColumn,
          ActiveCell.CurrentRegion)
      .Apply
    End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A3单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,当前区域中与当前单元格A3字体颜色一致的单元格数据自动移至最底端,不包括A10∶A14区域,如图4.14所示。

图4.13 待排序的原始数据

图4.14 已按单元格字体颜色排序的数据

提示

本实例参见光盘样本:..\第4部分\实例124.xlsm。

【相关知识说明】

ActiveCell.Font.Color:当前单元格的字体颜色。本例中表示排序条件。

实例125 按字体颜色扩展排序

【技巧说明】 按单元格字体颜色对扩展区域排序且有标题。

【案例介绍】 将当前列中字体颜色与当前单元格字体颜色一致的数据排在顶端,已用区域中其他列的数据相应调整,即对扩展区域排序。初始数据如图4.15所示。

【案例实现】 参见以下步骤:

[1] 使用快捷键Alt+F11进入VBE(Visual Basic Editor)环境。

[2] 单击菜单【插入】\【模块】,打开模块代码窗口。

[3] 在右边代码窗口输入以下代码:

Sub按单元格字体颜色扩展区域排序且有标题()
  With ActiveWorkbook.ActiveSheet.Sort
      .SortFields.Clear
      .SortFields.Add(ActiveCell, xlSortOnFontColor, xlAscending, , xlSortNormal)
.SortOnValue.Color=ActiveCell.Font.Color
      .SetRange Application.Intersect(Selection.CurrentRegion,
        Selection.CurrentRegion.Offset(1, 0))  '区域
      .Apply
    End With
End Sub

[4] 关闭VBE窗口返回到工作表。

[5] 选中A7单元格,用快捷键Alt+F8调出运行宏窗口,然后单击“执行”按钮,当前列中与当前单元格A7字体颜色一致的单元格数据自动移至最顶端,B列和C列扩展区域对应A列进行调整顺序,如图4.16所示。

图4.15 待排序的原始数据

图4.16 已将扩展数据区域排序

提示

本实例参见光盘样本:..\第4部分\实例125.xlsm。

【相关知识说明】

本实例与前面两例有两点不同:有标题、扩展区域参与排序。在编代码时仅需要修改Sort的范围参数SetRange即可。

实例124中使用以下区域(表示当前列中的已用区域,仅限于当前列):

    Intersect(ActiveCell.EntireColumn, ActiveCell.CurrentRegion)

本实例中使用已用区域(表示已用区域与已用区域向下偏移一行和合集,即排除第一行,这就对排序的区域进行了扩展,是已用区域,而非限于当前列,同时排除了首行,即标题不参与排序):

Intersect(Selection.CurrentRegion, Selection.CurrentRegion.Offset(1, 0))