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 通过与首列值对比来查找值:VLOOKUP函数

若需要查找的值与其首列中的值有对应关系,可通过VLOOKUP函数实现。VLOOKUP函数的语法为:=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)。

※ lookup_value:用数值或数值所在的单元格指定在数组第一列中查找的数值。如果为lookup_value参数提供的值小于table_array参数第一列中的最小值,则VLOOKUP将返回错误值#N/A。

※ table_array:指定查找范围。

※ col_index_num:为table_array中待返回的匹配值的列号。当col_index_num参数为1时,返回table_array第一列中的值;col_index_num为2时,返回table_array第二列中的值,依此类推。

※ range_lookup:一个逻辑值,指定希望VLOOKUP查找精确匹配值还是近似匹配值。如果range_lookup为TRUE或被省略,则返回精确匹配值或近似匹配值。如果找不到精确匹配值,则返回小于lookup_value的最大值。如果range_lookup为TRUE或被省略,则必须按升序排列table_array第一列中的值;否则,VLOOKUP可能无法返回正确的值。

下面举例说明VLOOKUP函数的使用方法:某学校规定学生的综合得分为60分以下为D级,60分(包含60)至80分为C级,80分(包含80)至90分为B级,90分(包含90)以上为A级,现在需要将B列中的得分转换为等级评价。

01 打开工作表,在A列中输入学生姓名,在B列中输入学生的综合得分。

02 选中C2单元格,在其中输入公式:=VLOOKUP(B2,{0,”D”;60,”C”;80,”B”;90,”A”},2)。

03 使用填充柄功能复制公式到该列的其他单元格中,即可得到所有学生的得分等级结果。

alt

Excel 通过与首行值对比来查找值:HLOOKUP函数

当比较值位于数据表的首行,并且要查找下面给定行中的数据时,可通过HLOOKUP函数实现。HLOOKUP函数的语法为:=HLOOKUP(lookup_value,table_array, row_index_num,range_lookup),各参数的含义介绍如下。

※ lookup_value:用数值或数值所在的单元格指定在数组第一行中查找的数值。

※ table_array:指定查找范围,即需要在其中查找数据的信息表。如果range_lookup为TRUE,则table_array的第一行的数值必须按升序排列:…-2、-1、0、1、2、…、A~Z、FALSE、TRUE;否则,函数HLOOKUP将不能给出正确的数值。如果range_lookup为FALSE,则table_array不必进行排序。

※ row_index_num:为table_array中待返回的匹配值的行号。row_index_num为1时,返回table_array第一行的数值,row_index_num为2时,返回table_array第二行的数值,依此类推。如果row_index_num小于1,则HLOOKUP返回错误值#VALUE!;如果row_index_num大于table_array的行数,则HLOOKUP返回错误值#REF。

※ range_lookup:用TRUE或FALSE指定查找方法。

下面以查询成绩表中姓名为“张明”的学生的“数学”成绩为例,具体操作如下。

01 打开成绩表,选中需要显示结果的单元格。

02 在其中输入公式:=HLOOKUP(”数学”,A2:F8,3),然后按下“Enter”键确认,即可得到“张明”的“数学”成绩为“60”。

alt

Excel 是否可以根据姓名和科目自动查找对应成绩?

图 7.53 所示的成绩表中行标题为姓名,列标题为科目,能否在输入姓名和科目名称后自动给出对应的成绩?

成绩表

解题步骤

根据已知的两个条件查询对应的数据,达成此需求有多种方法,其中使用公式灵活性最好,具体操作步骤如下。

1.在I1:K1中分别输入“姓名”、“科目”和“成绩”。

2.在I2:J2分别输入“朱明”和“化学”。

3.在K2单元格输入以下公式:

此时公式返回朱明的化学成绩94,效果如图7.54所示。

图7.54 查找朱明的化学成绩

4.将姓名修改为“曹锦荣”,将科目修改为“语文”,此时K2的公式会返回成绩“100”(见图7.55)。

图7.55 查找曹锦荣的语文成绩

知识扩展

1.MATCH函数用于计算一个字符串在一维数组或单行/单列区域的出现位置。例如,在图7.55中,曹锦荣在A2:C11区域中的出现位置是第8位,那么公式“=MATCH(I2,A2:A11,0)”的返回值就是8。MATCH函数的语法如下:

其中第一参数是查找对象,第二参数是一维数组或单列区域/单行区域,第三参数则用于控制查找方式,赋值为0时表示精确查找,赋值为1或-1时表示模糊查找,工作中用得最多的是精确查找。简言之,MATCH函数的功能就是在第二参数中查找第一参数的位置,并由第三参数决定查找方式。

2.INDEX函数的功能是在一个区域或数组中按位置查找对应的值,由于MATCH函数的功能正是计算位置,因此INDEX函数经常搭配MATCH函数使用,本例正是此类型的应用案例。

3.在本例公式中,第一个MATCH函数用于计算纵向位置,第二个MATCH函数用于计算横向位置,两者的交叉点刚好是B2:G11区域中对应的成绩。

4.了解公式的含义和计算过程的最好方法是使用公式求值工具。以图7.54中的公式为例,了解公式的方法是选中K2单元格,然后单击功能区的“公式”→“公式求值”,并在对话框中单击“求值”按钮,图7.56所示的窗口中表达式“MATCH(I2,A2:A11,0)”的下画线表明下一步会计算这个表达式,此时再次单击“求值”按钮,对话框会变为图 7.57 所示的效果,图中说明了两个问题,一是表达式“MATCH(I2,A2:A11,0)”的计算结果为6,二是下一步要计算的表达式是J2的值。

图7.56 表示下一步要计算MATCH(I2,A2∶A11,0)

图7.57 表明下一步要计算J2

再次单击“求值”按钮,窗口内容会变成图7.58所示的状态,表示J2的计算结果是“化学”,下一步要计算的表达式是“MATCH(J2,B1:G1,0)”。

图7.58 表明下一步要计算MATCH(J2,B1∶G1,0)

再次单击“求值”按钮,窗口内容会变成图7.59所示的状态,表示“MATCH(J2,B1:G1,0)”的计算结果是4,下一步要计算的表达式是“INDEX(B2:G11,6,4))”。

图7.59 表明下一步计算INDEX(B2∶G11,6,4))

再次单击“求值”按钮,窗口内容会变成图7.60所示的状态,表明公式的最终结果是94。

图7.60 公式的最终计算结果

Excel 如何查找所有文本格式的单元格?

在图4.144中,C列、F列和I列都使用了公式对上方的数值进行求和,但是前两列的合计结果都是错误的,怀疑是某些单元格设置成了文本格式,导致单元格中的值不参与运算,因此需要验证工作表是否存在文本格式的单元格。

假设工作表中有文本格式的单元格,是否有办法一次性选中它们呢?

图4.144 求和出错的销量表

解题步骤

“定位条件”工具可以选择所有值为文本的单元格,但是不能选中所有格式为文本的单元格,因此唯一的选择是通过“查找和替换”对话框实现需求,具体操作步骤如下。

1.按组合键<Ctrl+A>全选数据区域。

2.按<Ctrl+F>,弹出“查找和替换”对话框。

3.单击“选项”按钮,然后单击“格式”按钮,弹出“查找格式”对话框。

4.打开“数字”选项卡,选择左方的“文本”,然后单击“确定”按钮返回“查找和替换”对话框,图4.145是“查找格式”设置界面。

图4.145 设置查找格式

5.单击“查找全部”,然后按<Ctrl+A>全选目标单元格,关闭对话框后可以看到所有文本格式的单元格都处于选中状态,效果如图4.146所示。

图4.146 被选中的文本格式单元格

在“开始”选项卡的格式栏中可以看到选区单元格的格式代码为“文本”。

知识扩展

1.将单元格设置为文本格式,然后输入数值,此数值不会参与求和运算。但是在单元格中已经有数值的情况下将单元格修改为文本格式,那么此时的数值可以参与求和运算。

2.在文本格式的单元格中输入数值,数值会变成文本,从而致使单元格的值不参与求和运算,但是此时将单元格的格式修改为“常规”,单元格中的值仍然不能参与求和运算,必须修改格式后再重新输入数值才行。

最简单的方法是双击单元格,然后按下Enter键,此操作相当于重新输入一次数值,不过只能一次性修改一个单元格的值。

将文本格式的数字批量还原为数值,可以参考本书的案例117。

Excel 如何查找包含某名词的所有单元格?

图4.141所示的工作表中包含几十个产品名称及其对应的销量,现要求找到所有包含“扳手”二字的单元格,有没有办法一次性查找完成?

图4.141 销量表

解题步骤

包含XX通常有4种情况:其一是单元格的值等于XX;其二是单元格的值以XX开头;其三是单元格的值以 XX 结尾;其四是在单元格的中间包含 XX。使用“*XX*”为条件批量查找可以同时满足4种情况,具体操作步骤如下。

1.按组合键<Ctrl+A>全选数据区域。

2.按组合键<Ctrl+F>,弹出“查找和替换”对话框。

3.在对话框中将查找内容设置为“*扳手*”,然后单击“查找全部”按钮,在对话框下端会列出所有找到的目标,效果如图4.142所示。

图4.142 查找“*扳手*”

4.按组合键<Ctrl+A>全选目标单元格,然后关闭“查找和替换”对话框,工作中所有包含“扳手”的单元格都会瞬间被选中。

知识扩展

1.“*扳手*”代表“扳手”前面和后面存在任意长度的任意字符,“任意”也包含 0,因此“扳手”前面或后面没有任意字符也符合条件。

2.查找包含XX的单元格还有一种方法,直接查找XX,不选择“单元格匹配”复选框,然后单击“查找全部”按钮即可(见图 4.143)。不完全匹配其实就是包含的意思,因此不再需要输入通配符*。

图4.143 查找包含XX的目标

3.Excel支持在活动工作簿的所有工作表中查找,但是无法通过<Ctrl+A>组合键全选所有目标,因为选择操作只能作用于活动工作表。

Excel 能否按指定的范围查找数值?

将等于某个值的所有单元格修改为 Arial Black 字体,要完成此需求比较简单,按条件查找后全选目标,然后设置字体即可。但是Excel不支持按范围查找,如果要求“将大于0的所有数值修改为Arial Black字体”,Excel就无法直接实现需求了,Excel的“查找和替换”对话框不支持比较运算符。

是否有变通的方法突破限制,将图4.129中大于等于80、小于等于90的单元格修改为Arial Black字体呢?

图4.129 成绩表

解题步骤

Excel本身不支持按范围查找,但是调整一下查找方式可以找到符合指定范围的所有数值,然后对它们设置字体格式,具体步骤如下。

1.在H1和H2两个单元格分别输入80和90。

2.按下组合键<Ctrl+F>,弹出“查找和替换”对话框。

3.将“查找内容”设置为“*”,表示查找任意值的目标单元格,然后单击“查找全部”,此时在下方会罗列出所有找到的目标单元格地址和目标数值,同时在状态栏标注找到的目标数量,效果如图4.130所示。

图4.130 查找所有“*”

4.左键按住对话框下端并下拉,从而将对话框拉高,然后单击标题栏“值”,表示按值的大小排序,排序结果如图4.131所示。

图4.131 按值对查找目标升序排列

5.按住滚动条并下拉,直到出现第一个80时单击选中80,效果如图4.132所示。

图4.132 选中第一个80

6.再次下拉滚动条,直到出现90时停止,此时按住Shift键单击最后一个90(假设有多个90),然后关闭对话框。图4.133是选中80~90范围的值的状态下的“查找和替换”对话框,图4.134则是选中80~90范围的值的状态下的成绩表。

图4.133 按住Shift键选中最后一个90

图4.134 已选中值为80~90的成绩表

7.从字体框中选择Arial Black,成绩表中大于等于80和小于等于90的单元格都会显示为Arial Black字体,效果如图4.135所示。

图4.135 对选区修改字体

8.删除H列的两个辅助单元格。

知识扩展

1.本例在H列添加两个辅助单元格的意义在于方便定位,当成绩表中没有80和90时,人工添加80和90,在排序查找结果后方便定位上限和下限。如果成绩表中本身就有80和90,那么在“查找和替换”对话框中选择数值时要选择第一个80和最后一个90,避免遗漏。

2.查找时输入的“*”是通配符,代表任意长度的任意值,换言之,是查找所有非空单元格。

3.使用条件格式可以将指定范围的值突出显示,包含添加字体颜色、单元格背景色、对单元格添加下画线、添加删除线,但是条件格式不能修改单元格的字体。

Excel竖直查找:VLOOKUP函数实例图解

VLOOKUP函数用于在表格数组的首列查找指定的值,并由此返回表格数组当前行中其他列的值,VLOOKUP中的V表示垂直方向。当比较值位于需要查找的数据左边的一列时,可以使用VLOOKUP而不是HLOOKUP。其语法如下:


VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

其中,lookup_value参数为需要在表格数组第1列中查找的数值。lookup_value可以为数值或引用。table_array参数为两列或多列数据。col_index_num参数为table_array中待返回的匹配值的列序号。range_lookup参数为逻辑值,指定希望VLOOKUP查找精确的匹配值还是近似匹配值。下面通过实例详细讲解该函数的使用方法与技巧。

打开“VLOOKUP.xlsx”工作簿,切换至“Sheet1”工作表,本例中的原始数据如图16-19所示。要求根据工作表中的数据内容,实现竖直查找。具体的操作步骤如下。

STEP01:选中B10单元格,在编辑栏中输入公式“=VLOOKUP(A10,$A$2:$C$6,2,FALSE)”,用于在A2:C6单元格区域中根据A10单元格中输入的姓名查找对应的职务,输入完成后按“Enter”键返回计算结果,如图16-20所示。

图16-19 原始数据

图16-20 查找职务

STEP02:选中C10单元格,在编辑栏中输入公式“=VLOOKUP(A10,$A$2:$C$6,3,FALSE)”,用于在A2:C6单元格区域中根据A10单元格中输入的姓名查找对应的出生日期,输入完成后按“Enter”键返回计算结果,如图16-21所示。

STEP03:在A10单元格中输入一个员工姓名,例如“李靖”,在B10和C10单元格中就会显示出相应的结果,如图16-22所示。

图16-21 查找出生日期

图16-22 输入员工姓名

Excel水平查找:HLOOKUP函数图解

HLOOKUP函数用于在表格或数值数组的首行查找指定的数值,并在表格或数组中指定行的同一列中返回一个数值。当比较值位于数据表的首行,并且要查找下面给定行中的数据时,可以使用函数HLOOKUP(HLOOKUP中的H代表“行”)。当比较值位于要查找的数据左边的一列时,则须使用函数VLOOKUP。

HLOOKUP函数的语法如下:


HLOOKUP(lookup_value,table_array,row_index_num,range_lookup)

其中,lookup_value参数为需要在数据表第1行中进行查找的数值。lookup_value可以为数值、引用或文本字符串。table_array参数为需要在其中查找数据的数据表。使用对区域或区域名称的引用。row_index_num参数为table_array中待返回的匹配值的行序号。range_lookup参数为一逻辑值,指明函数HLOOKUP查找时是精确匹配,还是近似匹配。

下面通过实例详细讲解该函数的使用方法与技巧。

打开“HLOOKUP.xlsx”工作簿,切换至“Sheet1”工作表,本例中的原始数据如图16-13所示。要求根据工作表中的数据内容,练习水平查找指定的数值。具体的操作步骤如下所示。

STEP01:选中A6单元格,在编辑栏中输入公式“=HLOOKUP(“CocaCola”,A1:C4,2,TRUE)”,用于在首行查找CocaCola,并返回同列中第2行的值,输入完成后按“Enter”键返回计算结果,如图16-14所示。

图16-13 原始数据

图16-14 A6单元格返回结果

STEP02:选中A7单元格,在编辑栏中输入公式“=HLOOKUP(“Fenda”,A1:C4,3,FALSE)”,用于在首行查找Fenda,并返回同列中第3行的值,输入完成后按“Enter”键返回计算结果,如图16-15所示。

STEP03:选中A8单元格,在编辑栏中输入公式“=HLOOKUP(“F”,A1:C4,3,TRUE)”,用于在首行查找F,并返回同列中第3行的值,由于F不是精确匹配,因此将使用小于F的最大值CocaCola。输入完成后按“Enter”键返回计算结果,如图16-16所示。

图16-15 A7单元格返回结果

图16-16 A8单元格返回结果

STEP04:选中A9单元格,在编辑栏中输入公式“=HLOOKUP(“Future Cola”,A1:C4,4)”,用于在首行查找Future Cola,并返回同列中第4行的值,输入完成后按“Enter”键返回计算结果,如图16-17所示。

STEP05:选中A10单元格,在编辑栏中输入公式“=HLOOKUP(2,{1,2,3;”a”,”b”,”c”;”d”,”e”,”f”},2,TRUE)”,用于在数组常量的第1行中查找3,并返回同列中第2行的值,输入完成后按“Enter”键返回计算结果,如图16-18所示。

图16-17 A9单元格返回结果

图16-18 A10单元格返回结果

Excel MATCH函数数组元素查找

MATCH函数用于返回在指定方式下与指定数值匹配的数组中元素的相应位置。如果需要找出匹配元素的位置而不是匹配元素本身,则应该使用MATCH函数而不是LOOKUP函数。其语法如下:


MATCH(lookup_value,lookup_array,match_type)

其中,lookup_value参数为需要在数据表中查找的数值。例如,如果要在电话簿中查找某人的电话号码,则应该将姓名作为查找值,但实际上需要的是电话号码。lookup_array参数为可能包含所要查找的数值的连续单元格区域,应为数组或数组引用。match_type参数为数字-1、0或1,指明如何在lookup_array中查找lookup_value。

下面通过实例详细讲解该函数的使用方法与技巧。

打开“MATCH函数.xlsx”工作簿,切换至“Sheet1”工作表,本例中的原始数据如图16-9所示。要求根据工作表中的数据内容,查找在指定方式下与指定数值匹配的数组中元素的相应位置。具体的操作步骤如下。

STEP01:选中A7单元格,在编辑栏中输入公式“=MATCH(1.3,B2:B5,1)”,然后按“Enter”键返回计算结果。由于此处无正确的匹配,所以返回B2:B5数据区域中最接近的下一个值(1.2)的位置,结果如图16-10所示。

图16-9 原始数据

图16-10 A7单元格返回结果

STEP02:选中A8单元格,在编辑栏中输入公式“=MATCH(1.7,B2:B5,0)”,用于返回B2:B5数据区域中1.7的位置,输入完成后按“Enter”键返回计算结果,如图16-11所示。

STEP03:选中A9单元格,在编辑栏中输入公式“=MATCH(1.7,B2:B5,-1)”,然后按“Enter”键返回计算结果,由于B2:B5数据区域不是按降序排列,所以返回错误值“#N/A”,如图16-12所示。

图16-11 A8单元格返回结果

图16-12 A9单元格返回结果