=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
table_array第1列开始计数)FALSE(或0):精确匹配TRUE(或1):近似匹配(需升序排序)起点列必须包含查找值
A列,范围从A列开始(如A:D) B列,范围从A列开始但跳过B列(如C:E)→ 导致#N/A错误范围需覆盖返回值列
若返回值在D列,范围至少需到D列(如A:D或B:D)。若范围仅A:C,则col_index_num=4会返回#REF!错误。
绝对引用防范围偏移
下拉填充公式时,用$锁定范围:=VLOOKUP(F2, $A$2:$D$100, 3, FALSE)
👉 避免下拉时范围自动移动(如变成A3:D101)
避免整列引用拖慢速度
大型数据避免A:D,改用实际范围A2:D1000提升效率。
从table_array第1列开始计数
B2:E100: B列是第1列 → col_index_num=1 C列是第2列 → col_index_num=2 动态列号技巧
用MATCH函数自动定位列号,避免手动修改:
=VLOOKUP(F2, $A$2:$D$100, MATCH("单价", $A$1:$D$1, 0), FALSE)
👉 MATCH("单价", A1:D1, 0)返回"单价"在标题行的位置(如3)
| 模式 | 使用场景 | 关键要求 | 风险 |
|---|---|---|---|
FALSE(精确) |
查找唯一值(ID、姓名等) | 无排序要求 | 找不到返回#N/A |
TRUE(近似) |
数值区间匹配(如税率表) | 首列必须升序排序 | 未排序会导致结果错误! |
| 销售额下限 | 佣金率 |
|---|---|
| 0 | 5% |
| 10000 | 7% |
| 20000 | 10% |
公式:=VLOOKUP(15000, A2:B4, 2, TRUE) → 返回7%
(因15000在10000~19999区间)
| 错误值 | 原因 | 解决方法 |
|---|---|---|
#N/A |
查找值不存在 | 检查拼写/用IFERROR处理 |
#REF! |
col_index_num超出范围 |
确认范围列数(如范围4列则≤4) |
#VALUE! |
col_index_num<1 或非整数 |
输入≥1的整数(如2) |
| 错误数值 | 未排序下使用近似匹配 | 排序首列或改用FALSE |
=VLOOKUP("张伟", A2:D100, 3, FALSE)
A2:D100:员工ID在A列,部门在C列(即范围第3列) =VLOOKUP(F2, 产品表!$A$2:$D$500, MATCH("零售价", 产品表!$A$1:$D$1, 0), FALSE)
A2:D500查找 =VLOOKUP(当前库存量, 库存区间表!$A$2:$B$5, 2, TRUE)
库存区间表的A列必须为升序(如0,100,200,500)当遇到以下情况时,考虑INDEX+MATCH组合:
向左查找(VLOOKUP只能向右查)=INDEX(B2:B100, MATCH(F2, A2:A100, 0))
👉 在B列返回结果,根据A列匹配F2
多条件查找=INDEX(C2:C100, MATCH(1, (A2:A100=F2)*(B2:B100=G2), 0))
👉 同时匹配A列和B列
FALSE → 防意外结果
近似匹配用TRUE → 首列必须升序排序
绝对引用范围 → $A$2:$D$100
错误处理 → 用IFERROR(VLOOKUP(...), "未找到")
通过刻意练习这些规则,你的VLOOKUP准确率将大幅提升。当处理复杂场景时,及时切换INDEX+MATCH或XLOOKUP(Office 365)会更高效。