一、官方说明
本文介绍 Microsoft Excel 中 VLOOKUP 函数的公式语法和用法。(V是vertical[ˈvɜːrtɪkl] 的缩写)
1.1 说明
您可以使用 VLOOKUP 函数搜索某个单元格区域的第一列,然后返回该区域相同行上任何单元格中的值。
例如,假设区域 A2:C10 中包含雇员列表。 雇员的 ID 号存储在该区域的第一列,如下图所示。
如果知道雇员的 ID 号,则可以使用 VLOOKUP 函数返回该雇员所在的部门或其姓名。 若要获取 38
号雇员的姓名,可以使用公式 =VLOOKUP(38, A2:C10, 3, FALSE)。 此公式将搜索区域 A2:C10
的第一列中的值 38,然后返回该区域同一行中第三列包含的值作为查询值(“黄雅玲”)。
VLOOKUP 中的 V 参数表示垂直方向。 当比较值位于需要查找的数据左边的一列时,可以使用 VLOOKUP 而不是 HLOOKUP。
1.2 语法
:::tips VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) ::: VLOOKUP 函数语法具有下列参数 :
- lookup_value 必需。 要在表格或区域的第一列中搜索的值。 lookup_value 参数可以是值或引用。 如果为 lookup_value 参数提供的值小于 table_array 参数第一列中的最小值,则 VLOOKUP 将返回错误值 #N/A。
- table_array 必需。 包含数据的单元格区域。 可以使用对区域(例如,A2:D8)或区域名称的引用。 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 返回 错误值 #REF!。
- 大于 table_array 的列数,则 VLOOKUP 返回。 错误值 #REF!。
- range_lookup 可选。 一个逻辑值,指定希望 VLOOKUP 查找精确匹配值还是近似匹配值:
- 如果 range_lookup 为 TRUE 或被省略,则返回精确匹配值或近似匹配值。 如果找不到精确匹配值,则返回小于 lookup_value 的最大值。
要点 如果 range_lookup 为 TRUE 或被省略,则必须按升序排列 table_array 第一列中的值;否则,VLOOKUP
可能无法返回正确的值。
有关详细信息,请参阅对区域或表中的数据进行排序。
如果 range_lookup 为 FALSE,则不需要对 table_array 第一列中的值进行排序。
如果 range_lookup 参数为 FALSE,VLOOKUP 将只查找精确匹配值。 如果 table_array 的第一列中有两个或更多值与 lookup_value 匹配,则使用第一个找到的值。 如果找不到精确匹配值,则返回错误值 #N/A。
1.3 说明
在 table_array 第一列中搜索文本值时,请确保 table_array 第一列中的数据没有前导空格、尾部空格、直引号(’ 或 “)与弯引号(‘或“)不一致或非打印字符。 否则,VLOOKUP 可能返回不正确或意外的值。
有关详细信息,请参阅 CLEAN 函数和 TRIM 函数。
- 在搜索数字或日期值时,请确保 table_array 第一列中的数据未存储为文本值。 否则,VLOOKUP 可能返回不正确或意外的值。
- 如果 rangelookup 为 FALSE 且 **_lookup_value 为文本,则可以在 lookup_value 中使用通配符 (问号 (?) 和星号 (*)) 。
问号匹配任意单个字符;星号匹配任意一串字符。 如果要查找实际的问号或星号,请在该字符前键入波形符 (~**)。
:::success
助记口诀:
vlookup有点难,以下要点需牢记。
待查首列必须有,没有匹配就#NA
搜索区域无空引,否则就会意外出。
返回列号必须有,超出就是无引用。
true省匹配需升序,不精准就近似。
false匹配不排序,匹配就选第一准。
false匹配对文本,单问星串波形符。
:::1.4 示例
1.4.1 示例1
复制下表中的示例数据,然后将其粘贴到新 Excel 工作簿的 A1 单元格中。 为使公式显示结果,请选中它们,按 F2,然后按 Enter。 如果需要,您可以调整列宽以查看所有数据。
| 密度 | 粘度 | 温度 |
|---|---|---|
| 0.457 | 3.55 | 500 |
| 0.525 | 3.25 | 400 |
| 0.606 | 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(0.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 |
1.4.2 示例2
| 货品 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 | |
1.4.3 示例3
| 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
函数返回错误值 #N/A 时,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 的员工,将三个单元格的值连接为一个完整的句子。 | 潘钢是销售代表。 |
:::danger 上表中最后一个公式,结果为“潘刚是销售代表”,在复现的时候,出现与官方不相同的情况。经过对比,需要得出上诉结果,公式应该为=VLOOKUP(4,A2:E7,2,FALSE) & VLOOKUP(4,A2:E7,3,FALSE) & “是” & VLOOKUP(4,A2:E7,4,FALSE)。这个是我的修正,大家可以自行测试,欢迎评论指正。 ::: :::warning VLOOKUP函数官方示例源文件.xlsx :::
:::info
参考资料:
[1] office官方帮助说明
:::
