excel vlookup函数 怎么用,为什么返回不了正确的结果???

我有两张表,一张为移动网站里下载的短信清单---“详单查询”,另外一张为我飞信里的“飞信通讯录联系人”,我希望使用vlookup函数,使清单里的号码后面返回机主的姓名,我用的具体函数为 =VLOOKUP(C2,飞信通讯录联系人.xls!$A$2:$E$332,1,0),但返回的结果不正确(应该有关联的返回值,但返回的是#N/A,我估计我的函数写的有问题) 我将我的两张表截图发上来,请大家帮忙指出问题出在什么地方?

函数用错了,好好看看帮助吧,vlookup函数是一对一的不是一对多,而且你也对应反了

VLOOKUP

请参阅
在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。当比较值位于数据表首列时,可以使用函数 VLOOKUP 代替函数 HLOOKUP。
在 VLOOKUP 中的 V 代表垂直。
语法
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
Lookup_value 为需要在数组第一列中查找的数值。Lookup_value 可以为数值、引用或文本字符串。
Table_array 为需要在其中查找数据的数据表。可以使用对区域或区域名称的引用,例如数据库或列表。
如果 range_lookup 为 TRUE,则 table_array
的第一列中的数值必须按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;否则,函数 VLOOKUP 不能返回正确的数值。如果
range_lookup 为 FALSE,table_array 不必进行排序。
通过在“数据”菜单中的“排序”中选择“升序”,可将数值按升序排列。
Table_array 的第一列中的数值可以为文本、数字或逻辑值。
文本不区分大小写。
Col_index_num 为 table_array 中待返回的匹配值的列序号。Col_index_num 为 1 时,返回
table_array 第一列中的数值;col_index_num 为 2,返回 table_array 第二列中的数值,以此类推。如果
col_index_num 小于 1,函数 VLOOKUP 返回错误值值 #VALUE!;如果 col_index_num 大于 table_array
的列数,函数 VLOOKUP 返回错误值 #REF!。
Range_lookup 为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE
或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值;如果 range_value 为 FALSE,函数
VLOOKUP 将返回精确匹配值。如果找不到,则返回错误值 #N/A。
说明
如果函数 VLOOKUP 找不到 lookup_value,且 range_lookup 为 TRUE,则使用小于等于 lookup_value
的最大值。
如果 lookup_value 小于 table_array 第一列中的最小数值,函数 VLOOKUP 返回错误值 #N/A。
如果函数 VLOOKUP 找不到 lookup_value 且 range_lookup 为 FALSE,函数 VLOOKUP 返回错误值 #N/A。

参考资料:http://baike.baidu.com/view/3170068.htm?fromId=3153205

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-10
主要是VLOOKUP的第一参数要在查找区域中的第一列,显然你的查找数据是“飞信通讯录联系人.xls!$A$2:$E$332” 和第一列A列是人名,并不包含你要查找的C2的值,所以出错了。VLOOKUP这函数本身不支持反向查找,只能通过别人方法实现VLOOKUP的反向查找。把公式改为这样试试。
在你图中的J2单元格输入公式

=INDEX([飞信通讯录联系人.xls]Sheet1!A$2:A$332,IF(ISNA(MATCH(C2,[飞信通讯录联系人.xls]Sheet1!B$2:B$332,)),MATCH(C2,[飞信通讯录联系人.xls]Sheet1!D$2:D$332,),MATCH(C2,[飞信通讯录联系人.xls]Sheet1!B$2:B$332,)))本回答被提问者和网友采纳
第2个回答  2013-02-10
先不论公式函数是否用错,先说你写的公式格式中存在的问题
一引用工作薄名称写入方式错误,工作薄名应加上[BOOK1.XLS],如 [飞信通讯录联系人.xls]

二,在工作薄名后要写上工作表名并加上感叹号!,如 [BOOK1,XLS]SHEET1!,如 [飞信通讯录联系人.xls]飞信通讯录联系人!
所以你的引用区域应写成 [飞信通讯录联系人.xls]飞信通讯录联系人!$A$2:$E$332

三公式中的参数中写入1是错误的,1指的是返回引用区域的第一列(此列是查询匹配值的首列即公式中的A列,所以如果有匹配项只会返回本身的值),写入2时是返回引用列区域第一列有匹配值的同一行的第二列的值(即公式中的B列,3时是返回第三列(即公式中的C列)的同一行的匹配值...........因为引用区域是在A至E列,所以这个公式的最大参数是5.即5列区域

所以你写的这个公式本应要求返回的是名字,但首列就是名字,并不是你要匹配的电话号码列,并没有对应的匹配项所以公式找不到匹配的号码返回错误值

http://office.microsoft.com/zh-cn/excel-help/RZ101862716.aspx?section=3

按你的查找项首列是电话或手机号,所以查找的首列应该是B,C,D或E列,这样VLLOOKUP函数在这里就不方便使用了,应改用INDEX和MATCH函数组合并用COUNTIF来判断要查对的号码在哪一列存在

公式写成如下
=IF(COUNTIF([飞信通讯录联系人.xls]飞信通讯录联系人!B:E,C2),INDEX([飞信通讯录联系人.xls]飞信通讯录联系人!A:A,IF(COUNTIF([飞信通讯录联系人.xls]飞信通讯录联系人!B:B,C2),MATCH(C2,[飞信通讯录联系人.xls]飞信通讯录联系人!B:B,),IF(COUNTIF([飞信通讯录联系人.xls]飞信通讯录联系人!C:C,C2),MATCH(C2,[飞信通讯录联系人.xls]飞信通讯录联系人!C:C,),IF(COUNTIF([飞信通讯录联系人.xls]飞信通讯录联系人!D:D,C2),MATCH(C2,[飞信通讯录联系人.xls]飞信通讯录联系人!D:D,),MATCH(C2,[飞信通讯录联系人.xls]飞信通讯录联系人!E:E,))))),"该工作薄没有此号码")

这样在你的清单信息工作薄的详细查询工作表的J2单元格写入这个公式后下拉复制公式试一下
第3个回答  2013-02-19
是第一个参数的VLOOKUP在该地区的第一列,很明显,你发现数据的飞信地址簿中的联系人XLS! $ A $ 2:$ E $ 332,和第一列的列一个名字,不是说你想找到C2的值,所以错。 VLOOKUP函数本身并没有支持反向查找VLOOKUP反向查找,只能通过其他的方法来实现的。的公式改为尝试。
你的身影J2单元格输入公式

= INDEX(飞信地址簿中的联系人XLS工作表Sheet1!A $ 2:A港币332 IF(ISNA(MATCH(C2飞信地址簿中的联系人XLS] Sheet1中B $ 2:B $ 332)),MATCH(C2 [飞信地址簿中的联系人的。xls]工作表Sheet1!D $ 2:D332美元),MATCH(C2,飞信通信记录接触XLS工作表Sheet1!乙$ 2:B $ 332)))
第4个回答  2013-02-19
VLOOKUP这函数本身不支持反向查找,最简单的方法是你的公式不要动,将你的第一个表格的数据进行调整,将手机号码这一栏放在最前面,名字这一栏放手机号码后面一栏,使用你原来的公式就行了。
相似回答