夜雨聆风学习资料网

ARTICLE · 1339643

Excel 里最野的一条公式,微软自己都没写进说明书

Excel 里最野的一条公式,微软自己都没写进说明书

客户上周发来一张调价台账,问我:A-100 这个料,现在多少钱。

表是按时间往下记的,同一个物料前后调了七次价,最新的压在最后一行。我写了一行公式,他盯着看了十几秒,回了句:这玩意儿是不是写错了。

=LOOKUP(1,0/(B2:B13="A-100"),D2:D13)

他说得没错,看着就像错的。0 除以一个条件?条件还能当除数?除出来不全是错误值?

对,它就是靠出错干活的。

一、它到底在干什么

拆开看,三步。

第一步,B2:B13="A-100",得到一个 TRUE 和 FALSE 的序列。物料是 A-100 的位置是 TRUE,别的是 FALSE。

第二步,拿 0 去除这个序列。Excel 里 TRUE 当 1 用、FALSE 当 0 用,所以 0/TRUE 得 0,0/FALSE 得 #DIV/0!。

于是你手里多了一列东西:A-100 那几行是 0,其余全是错误值。

第三步,LOOKUP 去找 1。它有两个毛病,这回全用得上——它会跳过错误值,而且在一堆相等的东西里,它落在最后一个。

所以:跳过所有错误,剩下全是 0,取最后一个 0,再顺着这个位置去 D 列把单价拎出来。

一句话:它拿错误值当筛子,把不要的行全捅成洞,剩下那个就是答案。

顺带回答一个常被问的问题:为什么写 1,不写别的。写 2、写 9E307 都行,只要大于那堆 0、又不小到负数。写 1 是习惯,不是规定。

二、为什么非得是 0/,不能把条件直接丢进去

因为 LOOKUP 不认 TRUE 和 FALSE,它只认数字和错误。你得先替它翻译一遍:真话翻译成 0,假话翻译成错误。

翻译完了才有筛子。0 是可查的,错误是被跳过的。这两个特性一拼,筛子就成了。

这事儿说起来有点荒谬——你想筛掉一批行,办法是让它们全部报错。但这就是它干活的方式。

三、它凭什么比新函数还值钱

有个技术细节,很多人不知道:LOOKUP 是老函数里少数几个天生就吃数组的。

别的老函数碰到一片区域,你得按 Ctrl+Shift+Enter 把它变成数组公式,不按它只看第一个格子。LOOKUP 不用。你把整列塞进去,它自己一格一格过。

所以在 2003、2007、2010 上,这一行能干完 XLOOKUP 的活——不用辅助列,不用数组公式,不用记得按那三个键。

(SUMPRODUCT 也是天生吃数组的,那篇专门写过。)

四、四个能立刻抄走的写法

查最后一次。台账天然按时间往下加,最新的永远在最后一行:

=LOOKUP(1,0/(B2:B13="A-100"),D2:D13) → 16.00

再加一个条件。乘法就是 AND,两个都为真才得 0:

=LOOKUP(1,0/((B2:B13="A-100")*(C2:C13="华远")),D2:D13) → 15.20

反向取。日期在左边,价格在右边。VLOOKUP 只能往右看,它两头都行:

=LOOKUP(1,0/(B2:B13="A-100"),A2:A13) → 2026-11-28

问最后一次是谁供的。不用先查行号再回左边找,一条公式直接给名字:

=LOOKUP(1,0/(B2:B13="C-300"),C2:C13) → 华远

最后这个最实用。客户真正想问的,往往不是「多少钱」,是「这批货谁的」——出了问题要找谁,比价格重要。

五、五个坑

一、一个都不匹配,整列全错,结果就是 #N/A。别急着怀疑公式,先看有没有多一个空格。

二、两个区域行数必须一样。一个 12 行一个 13 行,它不报错,安静地错位给你看。

三、几万行以上会明显变慢。它是真的一格一格过,不是二分查找。几十万行还是换 XLOOKUP。

四、它给的是最后一个。想要第一个,得换 MATCH 精确匹配,或者把表倒过来排。

五、大小写它不认。a-100 和 A-100 它当一个东西。要严格区分,得 EXACT 配 SUMPRODUCT。

好消息也放一句:这函数全版本通吃,2003 都能跑。跟你说过好几回的那句话——新函数是面子,老函数是里子。

六、真正想说的一句

微软给 LOOKUP 写的说明,只有一种用法:在一行或一列里查值,要求升序排好。它从头到尾没提过 0/ 这个套路。

这个用法不是设计出来的,是长出来的。有人先发现 LOOKUP 会跳过错误值,有人发现 0/ 能把真假翻译成 0 和错误,然后有人把这两件事接起来。它没有作者,作者是成千上万个被同一类问题逼急的人。

所以它不在说明书里,它在用过的人手里。

落到你手上这摊活,道理一样。客户不会问你「这公式规不规范」,他只问「我这儿能不能跑」。你给他一个漂亮的 XLOOKUP,他打开是 #NAME?;你给他这条看着像错的 LOOKUP,它在他那台 2010 上跑得好好的。

能被交付的解法,才叫解法。剩下的都叫演示。

顺便接一句之前写过的:上一回 AGGREGATE 讲的是「表里一堆错误值,账照样算」——那是忍着错误。这一次反过来,主动把不要的行捅成错误,使唤错误。中间隔着的,就是从「会用它」到「懂它」的那段路。

七、运用实例

下面这张表就是那个台账,四个写法全在这张表上验过。照着换名字就能用。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料