vlookup的奇怪郁闷问题,大家探讨探讨...
我在使用vlookup查询的时候,发现有些数据无法正确取得,不知道为什么. 简化表示例如下:
sheet1:
============
id name
-----------
01 名01字
02 名02字
03 名03字
04 名04字
05 名05字
============
这个表格的范围是A2-B6,已按id排序.
然后,我在sheet2中的是这样的
sheet2:
============
id name
-----------
02 名02字[ =vlookup(a2,sheet1!$A$2:$B$6,2) ]
03 名03字[ =vlookup(a3,sheet1!$A$2:$B$6,3) ]
04 名04字[ =vlookup(a4,sheet1!$A$2:$B$6,4) ]
01 名04字[ =vlookup(a5,sheet1!$A$2:$B$6,5) ]
05 名05字[ =vlookup(a6,sheet1!$A$2:$B$6,6) ]
============
我的问题就是:为什么"01 名04字[ =vlookup(a5,sheet1!$A$2:$B$6,5) ]"这行要出错,无法查询到正确的姓名?应为"名01字"
而我的解决方法是把查询范围扩大,变成如sheet1!$A$2:$B$17就可以正确显示,如下:
sheet2:
============
id name
-----------
02 名02字[ =vlookup(a2,sheet1!$A$2:$B$17,2) ]
03 名03字[ =vlookup(a3,sheet1!$A$2:$B$17,3) ]
04 名04字[ =vlookup(a4,sheet1!$A$2:$B$17,4) ]
01 名01字[ =vlookup(a5,sheet1!$A$2:$B$17,5) ]
05 名05字[ =vlookup(a6,sheet1!$A$2:$B$17,6) ]
============
为什么?百思不得其解.
补充说明:这张实际的表的数据行是有三万多行,是不是数据太多的问题?环境是Excel2007
还有个问题,三万多行的表,我想向下填充公式,有什么快点的方法?就这样一直向下拖动,拖到底都要2-3分钟了,晕...
[解决办法]
vlookup(a5,sheet1!$A$2:$B$6,5)....以你这个格式,5个数字是不对的。。。最多是2,你范围就两列。。。你要得到5列的数据当然不对了
[解决办法]
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。
示例
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。
请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。
按 Ctrl+C。
在工作表中,选中单元格 A1,再按 Ctrl+V。
若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
该示例使用 1 个大气压的空气值。
1
2
3
4
5
6
7
8
9
10
A B C
密度 粘度 温度
.457 3.55 500
.525 3.25 400
.616 2.93 300
.675 2.75 250
.746 2.57 200
.835 2.38 150
.946 2.17 100
1.09 1.95 50
1.29 1.71 0
公式 说明(结果)
=VLOOKUP(1,A2:C10,2) 在 A 列中查找 1,并从相同行的 B 列中返回值 (2.17)
=VLOOKUP(1,A2:C10,3,TRUE) 在 A 列中查找 1,并从相同行的 C 列中返回值 (100)
=VLOOKUP(.7,A2:C10,3,FALSE) 在 A 列中查找 0.746。因为 A 列中没有精确地匹配,所以返回了一个错误值 (#N/A)
=VLOOKUP(0.1,A2:C10,2,TRUE) 在 A 列中查找 0.1。因为 0.1 小于 A 列的最小值,所以返回了一个错误值 (#N/A)
=VLOOKUP(2,A2:C10,2,TRUE) 在 A 列中查找 2,并从相同行的 B 列中返回值 (1.71)
------解决方案--------------------
检查sheet1中单元格的内容的格式,是否有空格或类似的东东。
[解决办法]
同意楼上各位的看法,一方面是函数最后一个参数明确写上 False 看看效果,
另一方面要检查一下 sheet2 和 sheet1 里 01 这个单元格的格式是否一样。