达永编程网

程序员技术分享与交流平台

14.2 常用查找与引用函数(2)INDEX与MATCH

一、使用HLOOKUP函数从上往下查询数据

HLOOKUP函数与VLOOKUP函数的语法非常相似,用法基本相同。区别在于VLOOKUP函数在纵向区域或数组中查询,而HLOOKUP函数则在横向区域或数组中查询。HLOOKUP数名称中的H表示 “水平的”。

例 使用HLOOKUP函数横向查询

HLOOKUP函数用法与VLOOKUP函数用法类似。

二、使用MATCH 函数返回查询项的相对位置

MATCH 函数用于返回查询项在一行或一列的单元格区域或数组中的相对位置。若有多个符合条件的结果,MATCH函数仅返回该项第一次出现的位置。函数语法如下

MATCH(lookup_value,lookup_array,[match_type])

第一参数lookup_value为指定的查找对象。第二参数lookup_array为可能包含查找对象的单元格区域或数组,这个单元格区域或数组只可以是一行或一列,如果是多行多列则返回错误值#N/A。第三参数match_type为查找的匹配方式。

当第三参数为0、1或省略、-1时,分别表示精确匹配、模糊匹配升序查找、模糊匹降序查找模式。

例1 当第三参数为0时,第二参数无排序要求。以下公式返回值为2,其含义为: 在第二参数的数组中字母“A”第一次出现的位置为2。

=MATCH("A",{"C”,"A","B","A","D"},0)

如果第二参数中不包含字母“A”,公式将返回错误值 #N/A。

=MATCH("A",{"C","B","D”},0)

例2 当第三参数为1或省略第三参数时,第二参数要求按升序排列,函数将返加小于或等于第一参数的最大值所在位置。以下公式返回值为3,其含义为: 第二参数中小于或等于6的最大值为5,5在第二参数数组中是第3个,因此结果返回3。

=MATCH(6,{1,3,5,7},1)

例3 当第三参数为-1 时,第二参数要求按降序排列,函数将返回大于或等于第一参数的最小值所在位置。以下公式返回值为2,其含义为:第二参数中大于等于8的最小值为9,9在第二参数数组中是第2个,因此结果返回2。

=MATCH(8,{11,9,6,5,3,1},-1)

例 MATCH函数常用查找示例

如下图所示,A至F列为员工薪酬表,通过A15、B15两个单元格的内容,返回相关数据。

公式为:=VLOOKUP(A15,A1:F11,MATCH(B15,A1:F1,),)。

MATCH(B15,A1:F1,)部分是指B15在A1:F1排第几个,返回6。再通过VLOOKUP函数在A1:F11这个区域中找A15的内容,并返回第6列的相关数据,即可得到正确的返回结果。

同样可以使用HLOOKUP函数,公式为:=HLOOKUP(B15,A1:F11,MATCH(A15,A1:A11,),)。

注意:如果MATCH函数简写第三参数的值,仅以逗号占位,表示使用0,也就是精确匹配方式,如“MATCH("章老师的EXCEL课堂",A:A,0)”等价于“MATCH("章老师的EXCEL课堂",A:A,)”。

例 统计两列相同数据个数

如下图所示,A和B列为员工某次考核的排名表,要求统计A和B列中相同数据个数。

在D4单元格中输入以下数组公式,按<Ctrl+Shift+Ente>组合键。

{=COUNT(MATCH(A2:A11,B2:B11,0))}

如果A2:A11单元格区域中的数据在B2:B11单元格区域中存在,“MATCH(A2:A11,B2:B11,0)”部分返回A2:A11单元格区域中的数据在B2:B11单元格区域中出现的位置数字。如果不存在,函数返回错误值 #N/A,运算结果如下。

{#N/A;#N/A;#N/A;#N/A;#N/A;1;2;3;4;5}

最后,使用COUNT函数统计出MATCH函数返回数组中数据的个数,即得到两列相同数据个数。

三、使用INDEX函数根据指定的行列号返回值或引用

INDEX函数可以实现在一个区域引用或数组范围中,根据指定的行号或( 和)列号来返回值或引用。INDEX函数有引用形式和数组形式两种,其语法分别如下 :

引用形式INDEX(reference, row_num, [column_num],[area_num]“彩式

数组形式INDEX(array, row_num, [column_num])

引用形式中,第一参数reference是必需参数,为一个或多个单元格区城的引用,如果为引用输入多个不连续的区域,必须将其用小括号括起来。第二参数row_num 是必需参数,为要返回引用的行号。第三参数column_num是可选参数,为要返回引用的列号。第四参数area_num是可选参数,为要选择返回引用的区域。

以下公式返回A1:D4单元格区域第 3行和第 4列交叉处的单元格,即D3单元格,=INDEX(A1:D4,3,4)

以下公式返回A1:D4单元格区域中第3行单元格的和,即A3:D3单元格区域的和。

=SUM(INDEX(A1:D4,3,))

以下公式返回A1:D4单元格区域中第4列单元格的和,即D1:D4单元格区域的和。

=SUM(INDEX(A1:D4,,4))

以下公式返回(A1:B4,C1:D4)两个单元格区域中第二个区域C1:D4单元格区域中第3行第1列的单元格,即C3单元格。由于INDEX函数的第一参数是多个区域,因此用小括号括起来。

=INDEX((A1:B4,C1:D4),3,1,2)

根据公式的需要,INDEX函数的返回值可以为引用或是数值。例如,以下第一个公式等价于第二个公式,CELL函数将INDEX函数的返回值作为B1单元格的引用。

=CELL("width",INDEX(A1:B2,1,2))

=CELL("width",B1)

而在以下公式中,则将INDEX函数的返回值解释为B1单元格中的数字。

=2*INDEX(A1:B2,1,2)

在数组形式中,第一参数array是必需参数,可以是单元格区域或数组。第二参数和第三参数要求与引用形式中类似。第二参数和第三参数不得超过第一参数的行数和列数,否则将返回错误值#REF。例如,以下公式将返回错误值#REF,因为A1:D10单元格区域中只有4列,而公式要返回该区域第20列的单元格。

=INDEX(A1:D10,4,20)

INDEX函数和MATCH函数结合运用,能够完成类似VLOOKUP函数和HLOOKUP函数的查询功能,并且可以实现灵活的递向查询,即从右向左或是从下向上查询。

例 根据员工号查询姓名和部门

如下图,要求根据E列的员工姓名查询并返回员工号和所在部门信息。

在F4单元格中输入以下公式,并向下复制到F6单元格。

=INDEX(A:A,MATCH(E4,B:B,))

MATCH函数以精确匹配的方式定位E4单元格员工姓名在B列中的位置,结果为6。再用INDEX函数根据此索引值,返回A列中第6行对应的员工号。

在G4单元格中输入以下公式,并向下复制到G6单元格。

=INDEX(C:C,MATCH(E4,B:B,))

公式原理与F列公式相同。

使用INDEX函数和MATCH函数的组合应用来查询数据,公式看似相对复杂,但在实际应用中更加灵活多变。例如,可实现逆向查询、提取同时满足行列两个匹配条件的结果等。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言