在Excel中,我们可以使用“排序”功能方便地对数据进行排序。
在Excel中,我们可以使用“排序”功能方便地对数据进行排序。
通常,我们可以使用“开始”选项卡“编辑”组“排序和筛选”中的命令,如图1所示。
图1
也可以使用“数据”选项卡“排序和筛选”组中的排序命令,如图2所示。
图2
然而,有时排序的结果不会像我们想像中的那样,这就需要了解Excel对不同类型数据的排序顺序。
Excel对不同类型数据的排序顺序
如下图3所示,对不同类型的数据进行了升序和降序排列。
图3
以升序排列为例,从中我们可以发现下面的规律:
首先排序的是数字,按从小到大的顺序排列。因为Excel是以序列数来存储日期的,因此日期参与数字的排序。
其次排序的是数字和字母混合的文本。其先后次序为:
先是作为文本处理的数字:0 1 2 3 4 5 6 7 8 9
然后是空格、感叹号和特殊符号:
最后是字母,按字母表先后顺序排列并区分大小写:
A B C D E F G H I J K L MN O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
撇号(’)和连字符(-)被忽略,但是如果两个文本字符串除连字符外完全相同,则包含连字符的文本排在后面。
接着是布尔值,其中FALSE在前,TRUE在后。
然后是错误值,如#DIV/0!和#REF!。
最后是空单元格。无论升序还是降序,空单元格总排在最后。
降序排列的基本顺序与上面的相反,如图4所示。
图4
排序中的误区和问题
在排序过程中,我们可能有一些想当然的情况导致排序与想像中的不同,也可能会遇到一些结果有差异的问题。
如下图5所示的数据:
图5
可能认为Excel会为我们排序成图6所示的结果。
图6
但实际上的结果如图7所示。
图7
从上文中排序顺序的解,我们应该能够理解此时Excel的排序顺序为什么与我们想像的不同。
有时候Excel排序时似乎没有将第1个数据参与排序,如下图8所示。
图8
结果本来应该是1 2 3 4 5 6 7 8 9,但9并没有参与排序。
这是因为在“排序”对话框中,选取了“数据包含标题”复选框,如图9所示。此时,Excel将最顶端的9当成了标题,没有将其排序。
图9
Excel能够自动感知认为应该包含在排序中的单元格。此时,Excel会弹出对话框询问是否扩展选定区域(如图10所示),不会要求具体增加的单元格,而是直接扩展并加入其认为需要的单元格并排序,这有可能不符合你的要求。因此,不应该将控制权交由Excel处理,你必须能够确定需要排序的范围。
图10
Excel能够自动感知类似数字的文本,如本文开头的图3所示。此时,Excel会弹出如图11所示的对话框,询问是否将类似数字的文本与数字一样处理。
图11
如果像如图11所示,选取“分别将数字和以文本形式存储的数字排序”,那么对于本文开头图3所示的示例,即为图3中呈现的结果。如果选取“将任何类似数字的内容排序”,那么对于图3所要排序的数据,如果要求以升序排列,那么结果如图12所示。
图12
排序技术示例
自定义排序
如下图13所示,要求单元格区域B2:D10中的数据以城市为关键字按单元格B13:B17的顺序排列。
图13
首先,自定义排序序列。
如图14所示,在“Excel选项”的“常用”选项卡中,单击“编辑自定义列表”。
图14
在自定义序列的“选项”中,导入单元格区域B13:B17中的内容,如图15所示。当然,也可以单击“添加”按钮,按顺序手动输入序列。
图15
然后,选中要排序的单元格区域B2:D10,调出“排序”对话框。在“主要关键字”中选择“城市”,在“次序”中选择“自定义序列”,如图16所示。
图16
在弹出的如图15所示的自定义序列选项框中,选择刚才自定义的序列,单击“确定”,如图17所示。
图17
单击“确定”,结果如图18所示。
图18
块排序
如下图19所示,需要根据学号对每个学生进行排序,在排序时每个学生的学号、姓名、性别、班级、成绩都要在一起。
图19
首先,创建一个辅助列,使用每个学生的学号填充该列相应的单元格。
在单元格C3中的公式如下:
=IF(A3=”学号”,B3,C2)
下拉至数据单元格底端,结果如下图20所示。
图20
然后,选择所有数据单元格进行排序,如下图21所示。
图21
主要关键字选列C,不要选取“数据包含标题”,单击“确定”,结果如下图22所示。
图22
自动更新排序
如下图23所示,单元格B2:B10中的数值改变时,列D和列E中的排序数据会自动更新。
图23
实现上述效果主要是两个数组公式。
在单元格D2:D10中输入数组公式:
=SMALL(B2:B10,ROW(INDIRECT(“1:”& ROWS(B2:B10))))
在单元格E2:E10中输入数组公式:
=LARGE(B2:B10,ROW(INDIRECT(“1:”& ROWS(B2:B10))))