用index和match函数实现大量数据的查询 工作中,我们在表格里查询一个或几个数据,可以用"查找"-"替换"来实现。如果有大量数据需要我们查询并输出相关资料,逐个查询将浪费大量时间和精力。利用EXCEL自带的index和match函数组合可以轻松完成任务。 举例:现在有某单位组织的会员活动的邀请人员名单,如图1:
用CTRL+F当然可以逐个查找,但是8000个足以令人晕倒.其实,利用index和match函数可以方便完成这个任务。我们图3工作簿的分表中C3单元格中输入"=index(总表!A:H,match(分表!A3,总表!A:A,0),7)",D3单元格中输入"=index(总表!A:H,match(分表!A3,总表!A:A,0),8)"。回车即出现对应的工作单位和电话。 INDEX(array,row_num,column_num)返回数组中指定单元格或单元格数组的数值 Array 本例中的Array就是"总表!A:H",列号column_num即是"工作单位"在数组中的列序号 "7",行序号Row_num 行序号Row_num需要用函数match来描述,match返回在指定方式下与指定数值匹配的数组 Lookup_value Lookup_array Match_type 如果 match_type 为 1,函数 MATCH 查找小于或等于 lookup_value 的最大数值。 如果 match_type 为 0,函数 MATCH 查找等于 lookup_value 的第一个数 如果 match_type 为 -1,函数 MATCH 查找大于或等于 lookup_value 的最小数值 具体到本例中,分表中C3单元格在总表中的对应数据的行号就是会员编号200720217在总表中相同的会员编号所在的行号。 match(分表!A3,总表!A:A,0)就是返回分表A3单元格中数值在总表中对应的相同会员编号的数值所在单元格的行号。就是总表中会员编号字段里值为200720217的单元格的行号,"总表!A:A"就是指总表的会员编号字段的单元格范围;"<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0"表示查找等于200720217的第一个数值的行号。 该例中函数match(分表!A3,总表!A:A,0)代替了INDEX(array,row_num,column_num)中的参数 row_num 综上所述函数index(总表!A:H,match(分表!A3,总表!A:A,0),7)返回分表中A3单元格中的数值200720217在总表中"会员编号"字段中的相同数值的单元格的行号和工作单位字段列号对应的单元格中的数值。 选中C3单元格双击其右下角的填充柄(鼠标指针变为实心黑"+"时双击),即把公式向下填充至最后一个记录。此时分表中工作单位字段全部填充了相应的数据。如图3 同理 D4单元格中函数index(总表!A:H,match(分表!A3,总表!A:A,0),8)是返回对应数值的电话。 选中C4单元格双击其右下角的填充柄(鼠标指针变为实心黑"+"时双击),即把公式向下填充至最后一个记录。此时分表中电话字段全部填充了相应的数据。 同样的方法,如果需要调出其它字段如"籍贯"、"民族"等数据,只需改变INDEX(array, MATCH(lookup_value,lookup_array,match_type),column_num)里的行序号参数column_num即可。 该方法中MATCH(lookup_value,lookup_array,match_type)里的lookup_value参数应使用没有重名的字段,该例中的会员编号没有重复,如是用人名做参数,如人名有重复,就只能返回对应的行号最靠前的数据。 该方法可以节省大量时间,如果各位读者遇到类似问题,均可使用此函数。该方法在微软EXCEL2003中使用正常有效.
阅读 |
|