0Pricing
Excel Formulas Academy · 课时

查找最后一个匹配值

使用反向搜索技巧返回最近的匹配项

查找最后一个匹配值 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 INDEX-MATCH-MATCH 进行双向查找
  2. 查找最后一个匹配值
  3. 使用 INDEX-MATCH 进行多条件查找
  4. 等级表中的近似匹配
← 返回 Excel Formulas Academy