ARTICLE · 1287168
Excel 查找与定位函数:VLOOKUP、INDEX+MATCH、LOOKUP、OFFSET
Excel 查找与定位函数:VLOOKUP、INDEX+MATCH、LOOKUP、OFFSET
拿一张订单编号去另一张表里把对应价格找回来,是 Excel 里最高频的操作,没有之一。VLOOKUP 大名在外,但遇到"要往左找""要同时满足两个条件"就会卡壳,这时候 INDEX+MATCH、LOOKUP 数组写法、OFFSET 才显出本事。
VLOOKUP 纵向查找

语法 =VLOOKUP(查找值, 查找区域, 返回第几列, 匹配方式)。
• 第四个参数写 0(或 FALSE)是精确匹配,日常几乎都用它;写 1(TRUE)是近似匹配,只在区间表里用。
• 返回第几列,是数"查找区域里从左到右第几列",不是工作表的列号。
举例:
• 用订单编号 10022 找零售价:=VLOOKUP("10022",A2:D9,4,0) 得 40。区域 A2:D9 里零售价在第 4 列。
• 查找值放在 G2 单元格更通用:=VLOOKUP(G2,A2:D9,4,0),下拉时 G2 变 G3,公式跟着换。
VLOOKUP 有两条绕不开的铁律,也是新手出错的重灾区。
1.查找值必须在那片区域的最左列。想按 C 列找、返回 A 列,VLOOKUP 直接无能为力,得换 INDEX+MATCH。
2.第四个参数一定要写 0。不写默认是近似匹配,结果常常张冠李戴。
找不到时 VLOOKUP 返回 #N/A,用 IFERROR 包一下能显示得更好看:
=IFERROR(VLOOKUP(G2,A2:D9,4,0),"没找到")。
INDEX + MATCH 组合查找

•=INDEX(区域, 行号, [列号]) 按行列坐标取出交叉处的值。
•=MATCH(查找值, 一列区域, 0) 返回查找值在这一列里排第几行,0 是精确匹配。
组合起来替代 VLOOKUP:
• 还是按订单编号 10022 找零售价:=INDEX(D2:D9,MATCH("10022",A2:A9,0))。MATCH 先在 A 列定位它在第几行,INDEX 从 D 列同一行取值。
• 反过来按 D 列的值找 A 列的编号也照样成立,这正是 VLOOKUP 做不到的从右往左找。
老版本 Excel 用不了新函数时,INDEX+MATCH 是兼容性最好、又比 VLOOKUP 灵活的方案,值得记牢。
LOOKUP 的两种写法

向量形式
语法 =LOOKUP(查找值, 查找向量, 结果向量),在查找向量里找值,返回结果向量对应位置的内容。
•=LOOKUP("10022",A2:A9,D2:D9) 效果和 VLOOKUP 类似。
• 它有个前提,查找向量那列必须升序排列,否则结果不可靠。这一点很多人不知道,查错多半栽在这。
数组形式做双条件查找
巧用 =LOOKUP(1, 0/(条件1*条件2), 结果列) 能一次按多个条件定位,这是老版本里做"多条件查找"的经典招。
• 想同时满足"编号是 10030"且"商品是啤酒"时返回零售价:=LOOKUP(1,0/(($A$2:$A$9=E2)*($B$2:$B$9=F2)),$D$2:$D$9)。
• 原理是 0/(真) 得 0、0/(假) 报错,LOOKUP 在一堆 0 和错误里找 1,只会命中条件都成立的那一行。
OFFSET 按偏移取数

语法 =OFFSET(起点, 下移几行, 右移几列, [取几行高], [取几列宽])。
•=OFFSET(A1,1,3) 从 A1 出发下移 1 行、右移 3 列,落在 D2,返回 D2 的值。
• 后两个参数省略时取单个格子,指定时可返回一片区域,配合 SUM 等做动态汇总。
OFFSET 是"易失性函数",表格一有变动它就重算,大范围高频用时会影响速度,能用 INDEX 替代的场景可以优先考虑 INDEX。
行列定位:ROW、COLUMN、ROWS、COLUMNS
•=ROW(D5) 得 5(在第几行),=COLUMN(D5) 得 4(在第几列)。
•=ROWS(A1:A10) 得 10(这片区域有几行),=COLUMNS(A:D) 得 4(有几列)。
单个看没什么用,组合进别的公式时就活了。比如 =ROW()-1 给数据自动编号,往下填就是 1、2、3;ROW() 配合 MATCH、OFFSET 算动态行号,是搭复杂公式的常用零件。
六个查找函数怎么选
感谢阅读,欢迎关注我的公众号

扫码关注「Hai分享」,获取更多干货内容















































































