在表格数组的首列查找指定的值,并由此返回表格数组当前行中其他列的值。
VLOOKUP 中的 V 参数表示垂直方向。当比较值位于需要查找的数据左边的一列时,可以使用 VLOOKUP 而不是 HLOOKUP。
语法
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
Lookup_value 为需要在表格数组 (数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。)第一列中查找的数值。Lookup_value 可以为数值或引用。若 lookup_value 小于 table_array 第一列中的最小值,VLOOKUP 返回错误值 #N/A。
Table_array 为两列或多列数据。使用对区域或区域名称的引用。table_array 第一列中的值是由 lookup_value 搜索的值。这些值可以是文本、数字或逻辑值。文本不区分大小写。
Col_index_num 为 table_array 中待返回的匹配值的列序号。Col_index_num 为 1 时,返回 table_array 第一列中的数值;col_index_num 为 2,返回 table_array 第二列中的数值,以此类推。如果 col_index_num :
- 小于 1,VLOOKUP 返回错误值 #VALUE!。
- 大于 table_array 的列数,VLOOKUP 返回错误值 #REF!。
Range_lookup 为逻辑值,指定希望 VLOOKUP 查找精确的匹配值还是近似匹配值:
注解
- 在 table_array 第一列中搜索文本值时,请确保 table_array 第一列中的数据没有前导空格、尾部空格、直引号(' 或 ")与弯引号(‘或“)不一致或非打印字符。否则,VLOOKUP 可能返回不正确或意外的值。有关详细信息,请参阅CLEAN 和 TRIM。
- 在搜索数字或日期值时,请确保 table_array 第一列中的数据未存储为文本值。否则,VLOOKUP 可能返回不正确或意外的值。有关详细信息,请参阅将保存为文本的数字转换为数字值。
- 如果 range_lookup 为 FALSE 且 lookup_value 为文本,则可以在 lookup_value 中使用通配符、问号 (?) 和星号 (*)。问号匹配任意单个字符;星号匹配任意字符序列。如果要查找实际的问号或星号,请在该字符前键入波形符 (~)。
示例 1
本示例搜索大气特征表的“密度”列以查找“粘度”和“温度”列中对应的值。(该值是在海平面 0 摄氏度或 1 个大气压下对空气的测定。)
|
A | B | C |
---|
密度 | 粘度 | 温度 |
---|
0.457 | 3.55 | 500 | 0.525 | 3.25 | 400 | 0.616 | 2.93 | 300 | 0.675 | 2.75 | 250 | 0.746 | 2.57 | 200 | 0.835 | 2.38 | 150 | 0.946 | 2.17 | 100 | 1.09 | 1.95 | 50 | 1.29 | 1.71 | 0 | 公式 | 说明(结果) |
---|
=VLOOKUP(1,A2:C10,2) | 使用近似匹配搜索 A 列中的值 1,在 A 列中找到小于等于 1 的最大值 0.946,然后返回同一行中 B 列的值。(2.17) | =VLOOKUP(1,A2:C10,3,TRUE) | 使用近似匹配搜索 A 列中的值 1,在 A 列中找到小于等于 1 的最大值 0.946,然后返回同一行中 C 列的值。(100) | =VLOOKUP(.7,A2:C10,3,FALSE) | 使用精确匹配在 A 列中搜索值 0.7。因为 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,在 A 列中找到小于等于 2 的最大值 1.29,然后返回同一行中 B 列的值。(1.71) | |
示例 2
本示例搜索婴幼儿用品表中“货品 ID”列并在“成本”和“涨幅”列中查找与之匹配的值,以计算价格并测试条件。
|
A | B | C | D |
---|
货品 ID | 货品 | 成本 | 涨幅 |
---|
ST-340 | 童车 | ¥145.67 | 30% | BI-567 | 围嘴 | ¥3.56 | 40% | DI-328 | 尿布 | ¥21.45 | 35% | WI-989 | 柔湿纸巾 | ¥5.12 | 40% | AS-469 | 吸出器 | ¥2.56 | 45% | 公式 | 说明(结果) |
---|
= VLOOKUP("DI-328", A2:D6, 3, FALSE) * (1 + VLOOKUP("DI-328", A2:D6, 4, FALSE)) | 涨幅加上成本,计算尿布的零售价。(¥28.96) | = (VLOOKUP("WI-989", A2:D6, 3, FALSE) * (1 + VLOOKUP("WI-989", A2:D6, 4, FALSE))) * (1 - 20%) | 零售价减去指定折扣,计算柔湿纸巾的销售价格。(¥5.73) | = IF(VLOOKUP(A2, A2:D6, 3, FALSE) >= 20, "涨幅为 " & 100 * VLOOKUP(A2, A2:D6, 4, FALSE) &"%", "成本低于 ¥20.00") | 如果某一货品的成本大于或等于 ¥20.00,则显示字符串“涨幅为 nn%”;否则,显示字符串“成本低于 ¥20.00”。(涨幅为 30%) | = IF(VLOOKUP(A3, A2:D6, 3, FALSE) >= 20, "涨幅为: " & 100 * VLOOKUP(A3, A2:D6, 4, FALSE) &"%", "成本为 ¥" & VLOOKUP(A3, A2:D6, 3, FALSE)) | 如果某一货品的成本大于或等于 ¥20.00,则显示字符串“涨幅为 nn%”;否则,显示字符串“成本为 ¥n.nn”。(成本为 ¥3.56) | |
示例 3
本示例搜索员工表的 ID 列并查找其他列中的匹配值,以计算年龄并测试错误条件。
|
A | B | C | D | E |
---|
ID | 姓 | 名 | 职务 | 出生日期 |
---|
1 | 李 | 小明 | 销售代表 | 12/8/1968 | 2 | 林 | 彩瑜 | 销售副总裁 | 2/19/1952 | 3 | 王 | 志东 | 销售代表 | 8/30/1963 | 4 | 潘 | 金 | 销售代表 | 9/19/1958 | 5 | 林 | 丹 | 销售经理 | 3/4/1955 | 6 | 苏 | 术平 | 销售代表 | 7/2/1963 | 公式 | 说明(结果) |
---|
=INT(YEARFRAC(DATE(2004,6,30), VLOOKUP(5,A2:E7,5, FALSE), 1)) | 针对 2004 财政年度,查找 ID 为 5 的员工的年龄。使用 YEARFRAC 函数,以此财政年度的结束日期减去出生日期,然后使用 INT 函数将结果以整数形式显示。(49) | =IF(ISNA(VLOOKUP(5,A2:E7,2,FALSE)) = TRUE, "未发现员工", VLOOKUP(5,A2:E7,2,FALSE)) | 如果有 ID 为 5 的员工,则显示该员工的姓氏;否则,显示消息“未发现员工”。(林) 当 VLOOKUP 函数返回错误值 #NA 时,ISNA 函数返回值 TRUE。 | =IF(ISNA(VLOOKUP(15,A3:E8,2,FALSE)) = TRUE, "未发现员工", VLOOKUP(15,A3:E8,2,FALSE)) | 如果有 ID 为 15 的员工,则显示该员工的姓氏;否则,显示消息“未发现员工”。(未发现员工) 当 VLOOKUP 函数返回错误值 #NA 时,ISNA 函数返回值 TRUE。 | =VLOOKUP(4,A2:E7,3,FALSE) & " " & VLOOKUP(4,A2:E7,2,FALSE) & "是" & VLOOKUP(4,A2:E7,4,FALSE) & "。" | 对于 ID 为 4 的员工,将三个单元格的值连接为一个完整的句子。(潘金是销售代表。) | |