魁拔4之梅零落最新消息:实现Excel单元格按颜色排序三法

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 06:22:01

实现Excel单元格按颜色排序三法

 

在应用Excel过程中,有时需要将一列单元格按它的字体颜色或填充颜色排序,遇到这种情况时不少人会束手无策,或者只能慢慢的给那些不同颜色的单元格标上不同的类别号,最后再将这些类别号排序,撬时良多。经过长时间的积累,在颜色排序上我逐渐积累了一些经验,下面将它们总结一下:

方法一、结合“Ctrl + H”和辅助列实现按颜色排序法:

   Ctrl + H是替换的快捷键,在替换对话框里有个格式替换功能,这种方法就是利用它的这个功能将颜色量化成为数字,再将量化后的数字排序,从而实现单元格将颜色排序。

假如有颜色的单元格都在A列,那么我们就可以按照下面的步骤进行操作:

1、用鼠标点一下Excel表格顶头的A字符(即有颜色列的列表头),然后依次按键:

2、按Ctrl+ C复制该列;

3、用鼠标“右键”再点一下表格顶头的A字符,呼出右键菜单;

4、按E键,选择“插入复制单元格”菜单项,此时新插入的列为被选中状态;

5、按Ctrl + H调出替换对话框;

6、当替换对话框打开后,按Alt + T 显示对话框的“选项”区;

7、按Alt + M 打开查找内容的格式定义对话框;

8、当“查找格式”对话框打开后,如果是文字有颜色就选择进入“字体”页,并指定一种字体颜色;如果是单元格填充色就选择进入“图案”页,并指定一种颜色;如果是单元格边框有颜色就进入“边框”页,并指定颜色。

9、在替换对话框的“替换为”文本框中输入数字“1”,然后按Alt + AA列中所有同类颜色的单元格都替换为数字“1

10、重复789三步,并以不同的数字替换不同的颜色,直到A列数据全部被替换完毕。

11、最后将表格按A列中刚替换出来的数字排序。

至此,将一列单元格按颜色排序的需要被实现了,利用这种原理简单、操作也不复杂的方法,我们还可以使很多原本不能排序的各种格式单元格按照我们的需要进行排序。而当我们掌握这种“格式”替换成“文字”或者“文字”替换成“格式”的技巧之后,在使用Excel过程中有时也能给我们带来一些意想不到的方便。

 

方法二、利用“宏表函数”和辅助列实现按颜色排序法:

Get.cell(返回的信息类别号,需要检查的单元格),这个宏函数可以取得单元格的多种信息。信息类别号的取值范围是1-66,代表着单元格的66种特征信息,其中24为获取单元格内第一个字符的颜色编号,63为获取单元格的填充色编号。我们可以利用这个函数取得单元格的颜色编码,然后就可以将单元格按颜色排序了。同样假设不同颜色的单元格是在A列,下面我们就来说说排序的操作过程:

1、用鼠标点击“插入”菜单→“名称”菜单项→“定义”子菜单项,打开“定义名称”对话框。

2、在第一个文字框中输入名称“getColor”,如果单元格的文字颜色不同,则在引用位置文字框中输入:“=get.cell(24,$a1)”;如果是单元格的填充色不同,则在引用位置文字框中输入:“=get.cell(63,$a1)”。

3、点击“确定”按钮关闭对话框。

4、用鼠标右键点击A列顶头的A字符,弹出的菜单上选择“插入”命令。

5、在新插入的A1单元格中输入:“=getcolor”。

6、拖动A1单元格右下角的填充句柄的方点向下填充公式。

7、最后将表格按A列公式求得的数字排序。

至此,按颜色排序的目的达到了,为了使表格在每次打开时更新颜色数字,我们还可以在定义名称时在公式的后面加入取当前时间的函数,即可以引用位置上输入:“=get.cell(24,$a1)+now()

 

方法三、利用自定义的“宏”进行排序:

下面是一个自定义的“宏”,它的作用就是将表格中指定的区域按照指定的列的颜色排序。宏的使用方法是:

1、在【工具】菜单中点击【宏】【Visual Basic编辑器】命令;

2、在VB编辑器左侧的资源窗口中双击【sheet1】标签模块,在右侧窗口中输入下面的“OrderColor()”宏代码;

3、用鼠标选定需要排序的单元格区域,然后在VB编辑器中运行下面的宏,运行宏前要注意设好“colorCol”参数。

说明,下面的宏对选区按指定的列的颜色排序,首次排序按升序排列,再次运行该宏则会倒序排。

Sub OrderColor()

    Dim Target As Range, colorCol As Integer

    Dim sortMethod As Integer, thisRow As Long, newSheet As Worksheet

    Dim tmpV As Long, sortCol As String * 1

    Dim interiorNum As Long, FontNum As Long

    On Error GoTo errHandle

    Set Target = Selection '对选择的区域排序,也可另外指定其它区域,如:Set Target = sheet2.range(“B2:F100”)

    colorCol = 1  '指定有颜色的列位于Target选区中的第几列

    Application.DisplayAlerts = False

    ThisWorkbook.Worksheets.Add after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

    Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

    target.Copy

    newSheet.Cells(1, 3).PasteSpecial xlPasteAll

    tmpV = 0

    sortMethod = 2

    For thisRow = 1 To target.Rows.Count '取得指定列的填充色代码和字体颜色代码

        newSheet.Cells(thisRow, 1).Value = newSheet.Cells(thisRow, colorCol + 2).Interior.Color

        newSheet.Cells(thisRow, 2).Value = newSheet.Cells(thisRow, colorCol + 2).Font.Color

        If newSheet.Cells(thisRow, 1).Value <> 16777215 Then interiorNum = interiorNum + 1

        If newSheet.Cells(thisRow, 2).Value <> 0 Then FontNum = FontNum + 1

    Next

    sortCol = "B"

    If interiorNum > FontNum Then sortCol = "A" '自动选择按填充色排序还是按字体颜色排序

    sortMethod = 2

    tmpV = Asc(sortCol) - 64

    For thisRow = 1 To target.Rows.Count - 1 '自动选择按升序排还是按降序排

        If newSheet.Cells(thisRow, tmpV).Value < newSheet.Cells(thisRow + 1, tmpV).Value Then

            sortMethod = 1

            Exit For

        End If

    Next

    newSheet.Range(newSheet.Cells(1, 1), newSheet.Cells(target.Rows.Count, target.Columns.Count + 2)).Sort _

    newSheet.Range(sortCol & "1"), sortMethod, , , , , , xlGuess, 1, False, xlTopToBottom

    newSheet.Range(newSheet.Cells(1, 3), newSheet.Cells(target.Rows.Count, target.Columns.Count + 2)).Copy

    target.PasteSpecial xlPasteAll

errHandle:

    newSheet.Delete

    Set newSheet = Nothing

    target.Parent.Select

End Sub

 

上面三法中,后两种方法在文档打开时都将会有安全提示,如果Excel软件的宏安全级别设置为高时,两种方法都可能失效。我们可以通过Excel的“工具”菜单中的“宏”“安全性”来调低Excel的宏安全性,以便能正确使用后两种方法