查找最后一个匹配值
使用反向搜索技巧返回最近的匹配项
查找最后一个匹配值 是 CoddyKit 上的免费 Excel Formulas Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Excel Formulas Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Excel Formulas Academy 课程共包含 4 节课。
最后一个匹配项的问题
大多数查找会返回找到的第一个匹配项。但有时您需要的是最后一个:产品最近的价格、最新的状态更新,或某位客户的最后一条记录。
当列表随着时间增长且同一个键多次出现时,最底部的行通常是最新的记录。使用精确匹配的标准 VLOOKUP 或 MATCH 却会执着地返回最上面的行。
本课程将介绍几种可靠的方法,用于提取最后一个匹配值。
为什么精确 MATCH 会找到第一个匹配项
MATCH(value, range, 0) 会从上到下扫描,并在找到第一个完全匹配项时停止。如果 "Apple" 出现在第 2、5 和 9 行,MATCH 会返回 2。
当键值唯一时,这种行为非常合适,但它会忽略更新的行。要找到最后一次出现的位置,我们需要一种从底部开始搜索,或返回最后一个匹配项位置的技术。
=MATCH("Apple", A2:A10, 0)使用反向搜索的 XLOOKUP
如果您使用的是现代版本的 Excel 或 Google Sheets,XLOOKUP 可以轻松完成这项工作。它的第五个和第六个参数用于控制匹配模式和搜索方向。
将 -1 作为搜索模式参数传入,即可按从最后到最前的顺序搜索。随后,XLOOKUP 会返回与最底部匹配键对应的值。
在这里,它会将 G1 中的产品与 A2:A10 进行查找,并从 B2:B10 返回匹配的价格,搜索从底部开始。
=XLOOKUP(G1, A2:A10, B2:B10, "Not found", 0, -1)经典 LOOKUP 技巧
在较旧的电子表格中,一种广为人知的技巧是将 LOOKUP 与数字 2 以及巧妙的条件除法结合使用。
表达式 1/(A2:A10=G1) 会为匹配的行生成 1,为不匹配的行生成除法错误。LOOKUP 搜索 2(一个大于所有现有值的数值)时会跳过这些错误,最终定位到最后一个有效的 1,并从 B2:B10 返回匹配值。
=LOOKUP(2, 1/(A2:A10=G1), B2:B10)LOOKUP 技巧的工作原理
逐步查看 1/(A2:A10=G1):
- 键匹配的行会得到
1/TRUE= 1。 - 不匹配的行会得到
1/FALSE= #DIV/0! 错误。
LOOKUP 会忽略错误;当找不到目标值 2 时,它会返回与最后一个非错误项对齐的结果。由于所有匹配项都是 1,最后一个 1 会胜出,因此您会得到最后一个匹配行的值。
=LOOKUP(2, 1/(A2:A10=G1), B2:B10)使用 INDEX 和 MATCH 查找最后一个匹配项
您也可以继续使用 INDEX-MATCH 系列。其思路是先找到最后一个匹配项的位置,再将该位置传给 INDEX。
在 MATCH 中使用相同的除法技巧,针对 1/(A2:A10=G1) 搜索 2,以获得最后一个匹配项的行位置。然后将该位置传给覆盖返回列的 INDEX。
=INDEX(B2:B10, MATCH(2, 1/(A2:A10=G1)))为什么 MATCH(2, ...) 能找到最后一个匹配项
当 MATCH 的第三个参数被省略时,默认值为 1,表示对升序数据进行近似匹配。此时 MATCH 会查找小于或等于 2 的最大值。
数组 1/(A2:A10=G1) 只包含 1 和错误。小于或等于 2 的最大值是 1,而 MATCH 会返回最后一个此类 1 的位置。这个位置正好就是最后一个匹配行。
=MATCH(2, 1/(A2:A10=G1))具体示例
假设 A2:A10 按时间列出 "Order-7" 的订单状态,B2:B10 存放状态文本。"Order-7" 出现在第 3、6 和 9 行。
- 匹配数组会将第 3、6、9 行标记为 1,其余行标记为错误。
- MATCH(2, ...) 返回 9 作为位置(从区域开头计数),也就是最后一个匹配项。
- INDEX 返回最后一行的状态,即最新状态。
=INDEX(B2:B10, MATCH(2, 1/(A2:A10=G1)))选择合适的方法
您应该使用哪种方法?
- XLOOKUP with -1:如果您的应用支持,这是最简洁、最易读的方法。
- LOOKUP(2, 1/...):几乎适用于所有版本,无需特殊版本支持。
- INDEX-MATCH(2, 1/...):当您还需要位置,或想从其他列返回值时很方便。
三种方法都会得到相同的答案;请根据您使用的工具以及对公式可读性的要求进行选择。
常见问题
请注意以下问题:
- 区域大小不匹配:条件区域和返回区域必须具有相同的高度,否则行会错位。
- 隐藏的重复内容:末尾空格会使 "Apple " 与 "Apple" 不同;请先使用 TRIM 清理文本。
- 完全没有匹配项:如果没有任何匹配项,该技巧会返回错误。请将其包装在
IFERROR中,以提供友好的备用结果。
=IFERROR(LOOKUP(2, 1/(A2:A10=G1), B2:B10), "Not found")使用多个条件查找最后一个匹配项
您可以将最后匹配技巧与两个条件结合使用。在除法中将条件测试相乘,这样只有同时满足两个键的行才会生成 1。
例如,查找产品等于 G1 且区域等于 G2 时的最新价格。LOOKUP(2, ...) 技巧仍会定位到最后一个符合条件的行。
这对于带时间戳的日志很有用,因为同一产品可能会出现在多个区域中。
=LOOKUP(2, 1/((A2:A10=G1)*(B2:B10=G2)), C2:C10)快速检查
检查您对最后匹配查找的理解。
课程回顾
若要返回最后一个匹配值,而不是第一个:
- 在支持的情况下,使用
XLOOKUP(..., -1)从底部向上搜索。 - 在任何版本中使用经典的
LOOKUP(2, 1/(range=key), result)技巧。 - 当您还需要位置时,使用
INDEX(result, MATCH(2, 1/(range=key)))。
请记住保持区域大小一致,清理多余空格,并为安全起见将公式包装在 IFERROR 中。
=XLOOKUP(G1, A2:A10, B2:B10, "Not found", 0, -1)常见问题解答
「查找最后一个匹配值」课时是免费的吗?
是的 — 「查找最后一个匹配值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Excel Formulas Academy 课程的其余内容,请升级到 CoddyKit PRO。 Excel Formulas Academy 课程共包含 4 节课。
「查找最后一个匹配值」这节课中我会学到什么?
使用反向搜索技巧返回最近的匹配项 你通过在浏览器中直接运行的动手代码来练习 Excel Formulas Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Excel Formulas Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Excel Formulas Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「查找最后一个匹配值」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Excel Formulas Academy 课中编写并运行代码吗?
能。每节 Excel Formulas Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。