Excel 在未排序且大小不定的区域里查找值:OFFSET函数

如果需要在一个未排序且大小不定的区域里查找值,可通过OFFSET和MATCH函数实现。OFFSET函数的语法为:=OFFSET(reference,rows,cols,[height],[width]),各参数的含义介绍如下。

※ reference:作为偏移量参照系的引用区域。Reference必须为对单元格或相连单元格区域的引用;否则,OFFSET返回错误值#VALUE!。

※ rows:相对于偏移量参照系的左上角单元格,上(下)偏移的行数,行数可为正数(代表在起始引用的下方)或负数(代表在起始引用的上方)。加入使用5作为参数Rows,则说明目标引用区域的左上角单元格比reference低5行。

※ cols:相对于偏移量参照系的左上角单元格,左(右)偏移的列数,列数可为正数(代表在起始引用的右边)或负数(代表在起始引用的左边)。假如使用5作为参数Cols,则说明目标引用区域的左上角的单元格比reference靠右5列。

※ height:表示高度,即所要返回的引用区域的行数,为可选项。Height必须为正数。

※ width:表示宽度,即所要返回的引用区域的列数,为可选项。Width必须为正数。如果行数和列数偏移量超出工作表边缘,函数OFFSET返回错误值#REF!。如果省略height或width,则假设其高度或宽度与reference相同。

下面以查找成绩表中奖牌为“季军“的选手比赛成绩为例,操作如下。

01 打开比赛成绩表,选中“B11”单元格,在其中输入查询条件,即需查询成绩的奖牌,本例输入“季军”。

02 选中需要显示结果的单元格,在其中输入公式:=OFFSET (A1,MATCH(“季军”,C2:C7,0),1),然后按下“Enter”键确认,即可得到奖牌为“季军”的选手成绩。

alt

Excel 在一个未排序的区域中查找值:INDEX、MATCH函数

如果需要在一个未排序的区域中查找值,可通过INDEX和MATCH函数实现。

INDEX函数的含义前面已经介绍了,这里将不再介绍。MATCH函数的语法为:=MATCH(lookup_value, lookup_array,[match_type]),各参数的含义介绍如下。

※ lookup_value:需要在lookup_array中查找的值。该参数可以为值(数字、文本或逻辑值)或对数字、文本或逻辑值的单元格引用。

※ lookup_array:要搜索的单元格区域。

※ match_type:指定Excel如何在lookup_array中查找lookup_value的值,该参数的值为-1、0或1。如果省略此参数,则默认值为1。

注意 match_type参数为1或省略,MATCH函数会查找小于或等于lookup_value的最大值;match_type参数为0,MATCH,函数会查找等于lookup_value的第一个值;match_type参数为-1,MATCH,函数会查找大于或等于lookup_value的最小值。

下面以在比赛成绩表中根据姓名查询成绩为例,介绍在未排序的单元格区域中查找某个值的具体操作。

01 打开成绩表,输入姓名和比赛成绩等相关数据。

02 选中“B9”单元格,在其中输入查询条件,即需查询成绩的选手姓名。

03 在单元格中输入公式:=INDEX(A2:B7,MATCH(B9, A2:A7,0),2),然后按下“Enter”键确认,即可得到该选手的比赛成绩。

alt

Excel 可否可按学历排序?

图 6.18 是应聘者信息表,其中应聘者的学历包含小学、初中、高中和大学。现要求按学历对它们降序排列,如何才能实现呢?

图6.18 应聘者信息表

解题步骤

要让Excel按学历排序,其前提是自定义一个学历序列,然后再按自定义序列排序即可,具体操作步骤如下。

1.按组合键<Alt+T+O>,弹出“Excel选项”对话框。

2.单击左方的“高级”项,然后在右方将滚动条下拉,直到看到“编辑自定义列表”时停止,单击“编辑自定义列表”按钮即可弹出“自定义序列”对话框。6.19是操作界面。

图6.19 调用“自定义序列”对话框

3.在“输入序列”下方的文本框中分别输入“大学”、“高中”、“初中”、“小学”,然后单击“添加”按钮,设置界面如图6.20所示。

图6.20 创建自定义序列

4.选择B1:B11区域,然后单击功能区的“开始”→“排序和筛选”→“自定义排序”,此时Excel会弹出“排序提醒”对话框,不做任何修改,单击“排序”按钮即可。

5.在“排序”对话框中将“主要关键字”修改为“学历”,将“次序”设置为“自定义序列”,此时会弹出“自定义序列”对话框。图6.21是排序条件设置界面,而图6.22则是调用自定义序列的界面。

图6.21 设置排序方式

图6.22 调用自定义序列

6.选择“学历”序列,然后单击“确定”按钮,返回“排序”对话框。

7.单击“排序”对话框中的“确定”按钮执行排序,排序结果如图6.23所示。

图6.23 排序结果

知识扩展

1.Excel内置的排序条件是数值大小、笔画多少、拼音顺序,以及按颜色排序、按条件格式产生的图标排序,当需要按临时指定的其他条件排序时,必须先定义序列,然后调用序列来排序。在指定序列时要注意顺序,因为按自定义序列排序时不能选择升序或降序。

本例中要求按学历降序排序,因此在定义序列时必须大学在前、小学在后。

2.按自定义的序列排序时,排序对象的值必须等于自定义序列中的值,而不能是包含关系的。例如,本例中自定义序列为大学→高中→初中→小学,那么 B2:B11 区域的值也只能是这 4个词语中的一个,而不能是“衡阳高中”或“武汉大学”这种包含多余文字的词语,否则无法排序。

Excel 能按颜色和数值双条件排序吗?

图6.14所示的工作表中包含了某班学生的100米短跑成绩和排名情况,其中女生被标示为黄色背景以示区别。现要求将黄色背景的单元格排在一起,然后再按短跑时间值升序排列。

图6.14 短跑成绩表

解题步骤

本例需求是将黄色背景的单元格排在一起,同时按短跑时间值升序排列,只要进入“排序”对话框,设置对应的两个条件即可,其中颜色条件放在上方,具体操作步骤如下。

1.选择A1:D12区域。

2.单击功能区的“开始”→“排序和筛选”→“自定义排序”,弹出“排序”对话框。

3.将第一排序条件的“主要关键字”设置为“姓名”,将“排序依据”设置为“单元格颜色”,然后在“次序”列表中选择“黄色”和“在顶端”,表示排序时将所有黄色单元格排在顶端,其他颜色的单元格按原来的顺序排列。图6.15是设置界面。

图6.15 设置第一排序条件

4.单击“添加条件”,然后将“次要关键字”设置为“时间”,其他选项保持默认值不变,最后单击“确定”按钮执行排序。图6.16是第二排序条件的设置界面,图6.17是排序结果。

图6.16 设置第二排序条件

图6.17 排序结果

知识扩展

1.按颜色排序包含单元格的背景颜色和单元格的字体颜色,可以二选一也可以两者同时使用。

2.Excel内置的按颜色排序只能一次把一种颜色的单元格排在一起,如果有10个颜色,要求每个颜色的单元格都排一起,那么应该添加10个排序条件。

如果要求10种颜色都各自排列在一起,使用Excel内置的功能相当困难,使用外置插件则瞬间完成,如Excel插件“E灵”可以一次性将所有颜色的单元格都按颜色排列在一起。

Excel 是否可以按夺冠次数多少对冠军降序排列?

图6.10中包含19届比赛的冠军榜,其中部分人员多次获得冠军。现要求按夺冠次数对各冠军的姓名降序排列,即获得冠军次数最多的人排在前面、最少的人排在后面,如果两人夺冠次数相同,那么数据源中最先出现的姓名排在前面。

图6.10 冠军榜

解题步骤

Excel本身并不支持按单元格字符的出现次数排序,因此只能借助COUNTIF函数辅助完成工作,具体操作步骤如下。

1.在C1单元格中输入“次数”。

2.在C2单元格中输入公式“=COUNTIF(B$2:B$20,B2)”,然后双击C2单元格的填充柄并将公式向下填充到C20。

3.选择C1:C20区域,然后单击功能区的“开始”→“筛选和排序”→“自定义排序”,此时Excel将弹出图6.11所示的“排序提醒”对话框,不做任何修改,单击“排序”按钮进入下一步界面。

图6.11 “排序提醒”对话框

4.在“排序”对话框中将“主要关键字”修改为“次数”,将“次序”修改为“降序”,然后单击“确定”按钮执行排序。图6.12是设置界面,图6.13则是排序结果。

图6.12 设置排序方式

图6.13 排序结果

5.删除辅助区域的所有单元格。

知识扩展

1.COUNTIF函数在本例中的功能是计算一个单元格的值在一个区域中的出现次数。为了确保公式下拉填充后返回结果总是正确的,第一参数必须使用B$2:B$20或$B$2:$B$20,而第二参数则必须采用相对引用。

2.在排序之前,如果只选择了一个连续区域中的部分单元格,启动“排序”对话框前会弹出对话框询问用户是以当前选定区域排序还是以扩展区域排序。扩展区域其实就是当前选区所在的整个数据区域,本例中的选区是C1:C20,其扩展区域是A1:C20。

Excel 是否可对工作表数据横向排序?

快速访问工具栏的“升序排序”、“降序排序”及“开始”选项卡中二级菜单“排序和筛选”下的子菜单“升序”和“降序”都无法实现横向排序。

图6.6中每个年级的成绩都是横向排列的,如何才能对它们降序排列呢?

图6.6 待排序的成绩表

解题步骤

Excel所有版本的排序工具都是默认纵向排序的,但可以进入“排序”对话框的“选项”窗口调整排序方向,具体步骤如下。

1.选中A1:J5区域。

2.单击功能区的“开始”→“排序和筛选”→“自定义排序”,弹出“排序”对话框。

3.单击“选项”按钮,弹出“排序选项”对话框,选择“按行排序”后单击“确定”按钮,返回“排序”对话框。图6.7是设置界面。

图6.7 选择按行排序

4.单击“主要关键字”右方的倒三角按钮,从弹出的列表中选择“行5”,然后将“次序”调整为“降序”,设置界面如图6.8所示。

图6.8 设置排序条件

5.单击“确定”按钮执行排序,结果如图6.9所示。

图6.9 排序结果

知识扩展

1.按列排序时,在“排列”对话框中的关键字会显示为列标题名称,而当“选项”中调整为“按行排序”后,关键字却不会显示为行标题,而是“行1”、“行2”……

2.如果使用多条件排序,每个条件的顺序相当重要。在“选项”按钮之前有“上移”和“下移”按钮,可以通过这两个按钮调整条件的顺序。

Excel 是否可按数值降序/生产线升序双条件排列数据?

图6.1中包含两条生产线的19名员工的捐款数据,现要求将这些数据按捐款额的大小降序排列,同时要确保A线的员工排在一起,B线的员工排在一起。

例如,A线职员B的捐款大于A线职员A的捐款,那么职员B应该排在职员A的前面;如果B线职员C的捐款大于A线职员A的捐款,那么它不能排在A线职员A和B的前面,而是要排在所有A线职工的后面。

图6.1 需要排序的数据

解题步骤

快速访问工具栏的“升序排序”、“降序排序”及“开始”选项卡中“排序和筛选”下的子菜单“升序”和“降序”都只能单条件排序。要执行多条件排序,需要调用“自定义排序”菜单,具体操作步骤如下。

1.选择A1:E20区域。

2.单击功能区的“开始”→“排序和筛选”,弹出“排序”对话框。

3.单击“主要关键字”右方的倒三角按钮,然后从列表中选择“生产线”,表示第一个排序条件是A列的生产线,“次序”保持默认的“升序”不变,设置界面如图6.2所示。

图6.2 设置第一排序条件

4.单击“添加条件”,然后将“次要关键字”设置为“捐款”,将“次序”调整为“降序”,设置界面如图6.3所示。

图6.3 设置第二排序条件

5.单击“确定”按钮执行排序,双条件排序效果如图6.4所示。

图6.4 排序结果

从图6.4中可以看出,排序时采用了双条件,优先条件是生产线名称,次要条件是捐款数额,所有数据都依照这两个条件调整顺序。

知识扩展

1.在“排序”对话框中,“数据包含标题”复选框默认是处于选中状态的,表示选区中的首行不参与排序。假设排序前只选择了B线的A11:E20区域,那么不能勾选此选项。

2.尽管看起来排序后的图6.4和数据源图6.1的A列未产生变化,但是在设置排序条件时仍然需要使用两个条件,其中一个条件用于限制 A 列升序排列。如果只用“捐款”单条件降序排列,生产线名称就会被打乱,形成图6.5所示的效果。

图6.5 单条件排序结果

Excel 可否随机排序值日表?

图4.264中第一周的值班表已经安排好,现在要求将第二周的姓名随机打乱,不再按第一周的顺序安排值日。尽管数据不多,可以手工打乱姓名,但现在期望获得一个通用的方法,不管有数据多少都可以用相同的步骤、相同的时间随机打乱这些姓名。

图4.264 值班表

解题步骤

随机打乱一列数据主要依靠两个小功能的组合,其一是在该列数据右方产生一列随机数,其二是对这两列数组排序,以随机数作为排序依据,具体操作步骤如下。

1.选择E2:E7,然后输入公式“=RAND()”,并按组合键<Ctrl+Enter>结束,此时E2:E7将会产生图4.265所示的随机数。

图4.265 在辅助列录入随机数

随机数是不确定的,因此读者在使用以上公式时产生的值并不会和图4.265中的值一致,而且修改其他单元格时随机数还会马上变化,按下F9键时随机数也会变化。

2.选择E2:D7区域,单击功能区的“数据”→“升序”(图标为),排序结果如图4.266所示。

图4.266 排序结果

3.再次单击“升序”按钮,D列的姓名会重新打乱,每次排序的结果都不同,因为E列的随机数在变化,那么排序的结果也会相应地变化。

4.删除E列的辅助数据。

知识扩展

1.函数RAND的功能是生成随机数,其值在大于0、小于1这个范围之内。RAND函数是易失性函数,因此修改工作表中任意单元格时,函数的值都会变化一次。

2.一个区域排序时是以活动单元格所有列为排序条件的,本例中要对D2:E7区域排序,以E列的值为排序条件,因此应该先选中E2,然后向左下角拖动鼠标,直到选中D7时松开,称之为选中E2:D7,此时E2处于活动状态。假设按平常的操作,选择D2:E7,那么D2单元格处于活动状态,排序后无法达到随机效果,而是D列的姓名按拼音顺序升序排列。

3.由于E列的值是随机数,因此升序排列还是降序排列并不影响最终的排序结果。

Excel 更改数据透视表的排序方式

在数据透视表中可以方便地对数据进行排序。下面通过实例介绍具体操作步骤。

STEP01:打开“数据透视表3.xlsx”工作簿,切换至“数据透视表”工作表,本例中要进行排序操作的数据透视表如图23-40所示。

STEP02:单击行标签右侧的筛选按钮,在展开的下拉列表中选择“降序”选项,如图23-41所示。经过上述操作,行标签更改为按降序排列,结果如图23-42所示。

图23-40 数据透视表

图23-41 选择“降序”选项

如果要将行标签的排序方式改回升序排列,按以下步骤进行即可实现。

STEP01:单击行标签右侧的筛选按钮,在展开的下拉列表中选择“其他排序选项”命令,打开“排序(产品名称)”对话框,如图23-43所示。

行标签降序排列

图23-42 行标签降序排列

选择“其他排序选项”命令

图23-43 选择“其他排序选项”命令

STEP02:打开“排序(产品名称)”对话框后,在“排序选项”列表区域中单击选中“升序排序(从A到Z)依据”单选按钮,然后单击下方选择框右侧的下拉按钮,在展开的下拉列表中选择“产品名称”选项,最后单击“确定”按钮将产品名称(行标签)的排序方式改回升序排列,如图23-44所示。

如果要设置更多的排序选项,可以在图23-44所示的“排序(产品名称)”对话框中单击“其他选项”按钮,打开“其他排序选项(产品名称)”对话框,然后设置自动排序、主关键字排序次序、排序依据、方法等选项,如图23-45所示。例如,如果希望每次更新报表时都自动排序数据,则勾选“每次更新报表时自动排序”复选框即可。

图23-44 设置排序方式

“其他排序选项(产品名称)”对话框

图23-45 “其他排序选项(产品名称)”对话框

Excel 2019恢复排序前表格

当用户反复地对表格进行各种排序以后,表格的原有次序已经被打乱。如果在排序后做了一些必要的编辑或修改操作,就不方便再使用Excel的撤销功能。这时,如果需要让表格恢复排序前的状态,就存在一定的难度了。

如果用户在排序前就打算保持表格在排序前的状态,则在表格的左侧或右侧插入一列空白列,并填充一组连续的数字,例如1,2,3……设置完成后,无论用户对表格进行怎样的排序,只要最后以插入的空白列为标准做一次升序排序,就能够返回表格排序前的次序。