VLOOKUP几乎成了Excel查找的代名词,但真正撑起查找函数家族天花板的,其实是LOOKUP。
这个函数被严重低估了。它既能做精确查找,也能做区间匹配;既能正向查,也能反向查;既能查一列,也能从多列里“挑”着查。理解了LOOKUP,就能理解Excel查找函数体系里至少一半的底层逻辑。
一、LOOKUP的基本用法
LOOKUP有两种基本形式:向量形式和数组形式。
向量形式:在单行或单列中查找
=LOOKUP(查找值, 查找向量, 返回向量)
这是最常用的形式,思路清晰:
- 第一参数:要找什么
- 第二参数:去哪里找
- 第三参数:找到后返回来什么
向量形式的核心前提是:第二参数必须按升序排列。如果不排序,结果会出错。
数组形式:在矩形范围内查找
=LOOKUP(查找值, 二维数组)
它会在数组的第一行或第一列里找,然后返回对应位置的值。这种形式不如向量形式直观,用得也少,但特定场景下能省事。
二、LOOKUP比VLOOKUP强在哪里?
第一,反向查找
VLOOKUP只能从左往右查,要查“根据姓名找工号”(姓名在工号右边),VLOOKUP得配合MATCH或者重新排列表格结构。LOOKUP天生支持反向,因为它只认“列”不认“左右”。
=LOOKUP(E2, B:B, A:A)
B列是姓名,A列是工号,姓名列在右边,照样查。
第二,多条件查找
VLOOKUP做多条件查找需要添加辅助列或套用数组公式。LOOKUP配合“1/”结构可以干净地处理多条件:
=LOOKUP(1, 0/((A:A="条件1")*(B:B="条件2")), C:C)
多个条件用星号连接,无论多少条件都按这个逻辑写。
第三,查找“最后一个”
VLOOKUP默认返回第一个匹配项,没办法直接取最后一个。LOOKUP配合“1/”结构天生返回最后一个符合条件的值:
=LOOKUP(1, 0/(A:A="张三"), B:B)
如果张三出现多次,返回最后一次对应的B列值。
第四,跨列合并查找
VLOOKUP只能查一个固定列,要查不同列必须用CHOOSE或重新组织数据。LOOKUP的数组形式可以在一个二维区域里直接查找。
第五,不需要辅助列
VLOOKUP做模糊匹配时,要求查找列首列按升序排列,否则需要加辅助列。LOOKUP同样有这个要求(向量形式下),但通过“1/0”结构可以绕过排序限制。
三、区间匹配:LOOKUP的杀手锏
VLOOKUP的第四个参数填TRUE可以做区间匹配,但很多人用不好。LOOKUP做区间匹配比VLOOKUP更直观:
=LOOKUP(C2, {0,60,80,90}, {"不及格","及格","良好","优秀"})C2是分数,0对应“不及格”,60对应“及格”,80对应“良好”,90对应“优秀”。LOOKUP自动找到“不超过C2的最大值”对应的等级。
核心理解:LOOKUP不找“等于”,而是找“最后一个小于等于查找值的值”对应的位置。这是它所有“技巧用法”的底层逻辑。
四、三个容易被忽略的点
第一,第二参数必须升序。 LOOKUP向量形式在二分查找的假设下工作。如果第二参数没有按升序排列,可能返回错误结果,而且不会报错。
第二,没找到怎么办? LOOKUP会返回小于等于查找值的最大值对应的结果,不会返回#N/A。如果查找值比所有值都小,返回#N/A。
第三,全列引用小心性能问题。 用A:A这种全列引用虽然方便,但在数据量大的情况下会影响计算速度。建议用A$1:A$1000这种明确的区域。
五、什么时候用LOOKUP,什么时候用其他?
- 需要反向查找或查找列在返回列右边 → LOOKUP
- 需要多条件查找 → LOOKUP
- 需要返回最后一次匹配 → LOOKUP
- 需要左连接(不管右边有没有匹配都保留左边数据) → VLOOKUP更直接
- 需要多列数组返回 → XLOOKUP最简洁
- 数据量极大且追求计算效率 → INDEX+MATCH可能更优
LOOKUP没有VLOOKUP那么有名,但它在某些场景下确实更干净、更直接。
