公式=INDEX(B$2:D$4,MATCH(B7,A$2:A$4,0),MATCH(A7,B$1:D$1,0))
公式表示:通过INDEX将B2:D4作为引用区域,通过MATCH(B7,A$2:A$4,0)返回行数2,通过MATCH(A7,B$1:D$1,0)返回列数3,以行数和列数交叉的位置,作为引用单元格,即D3单元格。
VLOOKUP函数输入
=VLOOKUP(B7,A$2:D$4,MATCH(A7,A$1:D$1,0))
HLOOKUP函数输入
=HLOOKUP(A7,$1:$4,MATCH(B7,A$1:A$4,0))
详见附图
INDEX函数
在给定的单元格区域中,返回特定行列交叉处单元格的值或引用。
MATCH函数
返回符合特定值特定顺序的项在数组中的相对位置。
=INDEX(B2:E14,MATCH(G3,B2:B14,0),MATCH(H3,B2:E2,0))
=INDEX(数据区域,MATCH(日期,日期列字段区域,0),MATCH(流量类型,流量类型行字段区域,0))
基本原理用“MATCH”函数分别找到统计日期、流量类型的相对位置,然后再用“INDEX”函数返回行列位置的对应字段数据。
下图示例,2020年店铺渠道访客数据,需要单独统计12月份流量类型为“付费流量”渠道访客数据。
在单元格I3 输入组合函数公式
=INDEX(B2:E14,MATCH(G3,B2:B14,0),MATCH(H3,B2:E2,0)) 即可引用“12月 付费流量访客数”。
最终完成12月份流量类型为“付费流量”渠道访客数据统计工作。
上一篇介绍的VLOOKUP实现对根据范围内的第一列某值可以快速找到其在范围内同行的某列的结果,同样match+index可以实现同样的结果。
先说match的语法
MATCH(lookup_value, lookup_array, [match_type])
第一个参数lookup_value和VLOOKUP函数第一个参数一样为查找值,为将要在lookup_array中匹配到的值。
第二个参数lookup_array,查找范围,单独为查找lookup_value的一列或者一列的某一片区域。
第三个参数[match_type],匹配类型,可选。数字 -1、0 或 1。 match_type 参数指定 Excel 如何将 lookup_value 与 lookup_array 中的值匹配。此参数的默认值为 1。
1 或省略 MATCH 查找小于或等于 lookup_value 的最大值。 lookup_array 参数中的值必须以升序排序,例如:-2, -1, 0, 1, 2, , A-Z,FALSE, TRUE。
0 表示 MATCH 查找完全等于 lookup_value 的第一个值。 lookup_array 参数中的值可按任何顺序排列。
-1表示MATCH 查找大于或等于 lookup_value 的最小值。 lookup_array 参数中的值必须按降序排列,例如:TRUE, FALSE, Z-A, 2, 1, 0, -1, -2, 。
match函数返回结果为匹配值在选定范围的行数
我们一般选精确匹配值就是0作为匹配类型,如下图1所示要查找的值
如图1所示,a处在A1:A5的第一个位置所以返回1,d在第四个位置返回4,找不到则返回#N/A。
下面介绍index函数的功能
先说index的语法
INDEX(array, row_num, [column_num])
第一个参数array表示索引的范围
第二个参数row_num表示要索引的值在array的第几行
第三个参数column_num表示要索引的值在array的第几列
index就是返回某个范围具体几行几列位置的值。下面具体举个示例
如图2所示,要找范围A1:B5范围内第三行第二列的值,则可通过index查找,返回值cc,cc值位于A1:B5范围的第三行第二列符合条件。
下面介绍match结合index实现vlookup功能
如图3所示,E列求得b处在A1:A5的范围的第几行,已知行数后就可以求得具体其相同行第几列的位置。
match结合index可以实现向左查询
如图4所示,先在范围b值在B1:B5处在第几行,知道行数后通过index索引范围,可以查找处在索引范围的相同行的第几列的值,这里取b值左边第一列位置值。得到bbb值。
欢迎交流
公式可以精简为这样:
=INDEX(电网部造价统计表!A:A,SMALL(IF(电网部造价统计表!$A11:$A1000="承德",ROW($11:$1000),4^8),ROW(A1)))&""
如果一定要坚持提问中的公式写法,修改为这样:
=INDEX(电网部造价统计表!A$11:A$1000,SMALL(IF(电网部造价统计表!$A11:$A1000="承德",ROW($1:$990),990),ROW(A1)))&""
提问的公式中 ROW($1:$998),998要与行数对应,A$11:A$1000 共990行,所以提问中ROW($1:$998),998也要改为ROW($1:$990),990 这就是提问的公式返回#N/A的原因。
还有以上的公式都是数组公式,输入完成后不要直接回车,要按三键 CTRL+SHIFT+回车 结束。
题目中公式的意思是,统计 电网部造价统计表 的A11:a1000所有等于 承德 的行,然后返回对应的A列的值,即返回A11:A1000自身,这样的应用一般较少,如果是想返回A列等于承德所对应的B列的值,只需把公式前面的=INDEX(电网部造价统计表!A:A。。。。改为:=INDEX(电网部造价统计表!B:B,即完整公式:
=INDEX(电网部造价统计表!B:B,SMALL(IF(电网部造价统计表!$A11:$A1000="承德",ROW($11:$1000),4^8),ROW(A1)))&""
行号和列号代表的不是一个明确的值,是一组数,要在两组数相交的位置才是你需要得出的结果。
例如,
第五行,行号筛选出了许多包含如A5,B5,C5……的单元格
第三列,列号筛选出了许多包含如C1,C2,C3……的单元格
两组相交的位置为C5。
一般情况INDEX很少单独使用,都是配合其他函数共同使用,例如MATCH
Match函数是用来返回单元格或者要引用的内容在指定区域的位置,index函数用来引用单元格的内容。
(1)match函数
match函数的语法是MATCH(lookup_value, lookup_array, match_type)
lookup_value:要在指定区域查找的值
lookup_array:指定区域
match_type:填0的话,就是精确匹配,查找等于lookup_value的第一个数值。
如下图,要查找15830045616这个号码的位置,公式是=MATCH(A13,B:B,0)。A13就是要查找的内容,就是号码。B:B指要在B列里查找,0是查找第一个等于A13的单元格位置。结果返回5,也就是说这个号码位于B列的第5行。
(2)index函数
index函数的语法是INDEX(array,row_num,column_num),通过查找返回特定位置的单元格的值。
Array为引用的区域,在这个区域里查找。
Row_num为要查找的值在这个区域的哪一行。
Column_num要查找的值在这个区域的哪一列。
如下图,我要查找第5行第6列的值,公式是=INDEX(A16:G24,5,6)。A16:G24代表的是要查找的区域范围。最后得到第5行第列,也就是F20这个单元格的值,就是45。
跟路飞学excel,如果有疑问,欢迎联系我答疑或者获取案例练习。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)