第3个回答 2016-10-12
函数定义: 按照垂直方向搜索区域
官方说明: 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值.当比较值位于数据表首列时,可以使用函数VLOOKUP代替函数HLOOKUP.
解赋大白话: 指定条件在指定区域直方向查找
使用格式: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
解赋白话格式: VLOOKUP(要查找的内容,搜索的区域,从查找区域首列开始到要找的内容的列数,指定是近似匹配还是精确匹配查找方式)
参数定义: Lookup_value 为需要在数组第一列中查找的数值.Lookup_value可以为数值、引用或文本字符串.
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.
要点: 如果range_lookup为TRUE,则table_array的第一列中的数值必须按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;否则,函数VLOOKUP不能返回正确的数值.如果range_lookup为FALSE,table_array不必进行排序.
注意事项: 1.Table_array的第一列中的数值可以为文本、数字或逻辑值.
2.文本不区分大小写.
3.如果函数VLOOKUP找不到lookup_value,且range_lookup为TRUE,则使用小于等于lookup_value的最大值.
4.如果lookup_value小于table_array第一列中的最小数值,函数VLOOKUP返回错误值#N/A.
5.如果函数VLOOKUP找不到lookup_value且range_lookup为FALSE,函数VLOOKUP返回错误值#N/A.
6.若有多个符合条件的情况:vlookup返回的是第一个满足条件的值,lookup返回的是最后一个满足条件的值.
>>>>> 函数应用实例 <<<<<
精确查找是vlookup最基本也是最常用的功能,对于数据量大的查找,其速度比菜单中的查找还快.设置vlookup第四个参数为false或0,即为精确查找.
精确查找适用于文本,也适用于数值;但对数值查找时须注意格式一致,否则会出错.
注:因为"0"输入速度快,不易输错,本函数宝典里的此类公式精确搜索都是以"0"代替"false".
例1 经典用法
每男每女家居生活馆 销售报表 查找左表单价
品名 件 单价 营业额
文胸G66 3 139 417 品名 文胸C598 公式显示
内裤F125 6 35 210 单价 99 =VLOOKUP(H26,B26:D34,3,0)
文胸G136 2 186 372
文胸C598 5 99 495 公式解释: H26:指定的条件
家居服A349 1 358 358 B26:D34:包含品名与单价的区域
文胸G137 3 68 204 3:在向右数第3列
内裤F186 8 29 232 0:精确查找
家居服B396 4 209 836
家居裙A87 2 169 338
例2 反向查找 上表为例,以单价查找销售件数
单价 99 公式显示
件数 5 =VLOOKUP(C42,IF({1,0},D26:D36,C26:C36),2,0)
注意{1,0}是一行二列(横向)常量数组,后面的两个区域是多行一列(纵向),即两个数组的方向不同,这样才会生成两列多行数组.
{1,0}详解见IF函数
例3 VLOOKUP函数的横向动态复制公式(一般应用在生成工资条)
每男每女家居生活馆 员工表
姓名 性别 年龄 题:查找性别与年龄
…… 如果按平常公式向右拉动复制.
袁丽琴 女 23 每男每女家居生活馆 员工表
张桂兰 女 19 姓名 性别 年龄
要淑君 女 28 要淑君 女 #N/A
肖慧琴 女 29 #N/A
王京京 女 25 公式显示
刘晶晶 女 30 =VLOOKUP(F55,$B$52:$D$63,2,0) =VLOOKUP(G55,$B$52:$D$63,2,0)
王建军 男 24 =VLOOKUP(F56,$B$52:$D$63,2,0)
孙建桃 男 22
张娟娟 女 23 从上表可以看出,VLOOKUP函数的第一参数和第二参数是随单元格位置变化而变化(现在不变是因为用了绝对引用),第三参数不变,第四参数是逻辑值,也不会变化.
杨丽莉 女 26
…… 先看第一个参数,横向复制时,行不变,但列在变化,我们只要锁定列,在横向复制时与"绝对引用"效果一样,所以在F55中锁定列,让其变成$F55.
第二个参数不变,照旧.
第三个参数,应该是从2变为3,这里我们可以嵌套一个COLUMN函数.COLUMN函数定义:返回列序号.
1 2 3 公式显示
1 2 3 =COLUMN(C2)
可以从上面的COLUMN例子中看出,随着列序号的变化,结果也在变化,但与行序号无关.
因此嵌套后的公式为:
每男每女家居生活馆 员工表
姓名 性别 年龄
要淑君 女 28
重点 利用复制=COLUMN()可以生成一个动态数值,这个列序号可以成为VLOOKUP的第三个参数,即动态参数.
例4 VLOOKUP用IF组成动态条件模糊查找,计算销售提成
每男每女家居生活馆 员工表 公式显示 =VLOOKUP(D81,IF(C81<3,$H$82:$I$88,$K$82:$L$88),2)
销售员 工龄年数 销售额 提成比例 提成金额 工龄<3年 工龄>=3年
刘晶晶 1 18798 3.50% 657.93 销售额分段点 提成比例 销售额分段点 提成比例
孙建桃 2 35000 5.00% 1750 ¥0 1.50% ¥0 2.00%
王建军 3 458920 10.00% 45892 ¥5,000 3.25% ¥5,000 6.25%
王京京 1 120000 7.00% 8400 ¥10,000 3.50% ¥10,000 7.25%
肖慧琴 2 99800 6.00% 5988 ¥20,000 5.00% ¥20,000 8.25%
杨丽莉 4 85000 9.25% 7862.5 ¥50,000 6.00% ¥50,000 9.25%
要淑君 1 108000 7.00% 7560 ¥100,000 7.00% ¥100,000 10.00%
袁丽琴 6 156920 10.00% 15692 ¥250,000 8.00%
"第四参数"(Range_lookup)为一逻辑值,指明函数VLOOKUP返回时是精确匹配还是近似匹配.如果为TRUE或省略,则返回近似匹配值.
也就是说.如果找不到精确匹配值,则返回小于"要查找的内容"(lookup_value)的最大数值;
这个例子,就是利用 返回小于"要查找的内容"(lookup_value)的最大数值 这一特点. 例
示
图 10 这是要找的值
↓ 9 找不到?
8 以箭头方向查最大的数值
例5 VLOOKUP用MATCH组成动态条件查找(数据源使用例4的源) 7
6
……
姓名 肖慧琴
查找项目 提成金额 公式显示
计算结果 5988 =VLOOKUP(C98,B80:F88,MATCH(C99,B80:F80,0),FALSE)
解赋解释 MATCH:返回搜索值的相对位置.
VLOOKUP第三参数"返回的匹配值的列序号"用MATCH得到调整的数字n,在对应名字所在行向右查找到该行第n列对应单元格的输入内容.
例6 屏蔽公式中的错误值
公式显示
#N/A =VLOOKUP(B107,B107:C107,2,0)
=IF(ISERR(VLOOKUP(B107,B107:C107,2,0)))),,"")
解赋解释 VLOOKUP函数查找结果为"#N/A"错误值,用ISERR函数出错误,再用IF判断转为空值.
这里用ISERR函数而非判断错误值种类更多的ISERROR函数,主要是考虑在公式引用无效、被0除、函数参数形式有错等情况时的“错误”判断,从而使我们不能及时发现差错。