You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求用于查找每行最终匹配值的Excel公式

Excel递归查找最终匹配值的解决方案

你需要的是递归追踪匹配链,返回最后一个无后续匹配的值,VLOOKUP仅返回首个匹配的特性确实无法满足需求,以下分不同Excel版本给出可行方案:


方案一:Excel 365/2021(支持动态数组)

利用LET、SCAN和XLOOKUP组合实现递归查找,无需辅助列:

=LET(
    起始值, B1,
    查找区域, A:B,
    匹配路径, SCAN(起始值, SEQUENCE(100), LAMBDA(当前值, _, IFERROR(XLOOKUP(当前值, 查找区域[#All], 查找区域[#All][[Column2]], ""), ""))),
    INDEX(匹配路径, MATCH(TRUE, 匹配路径="", 0)-1)
)

说明:

  • LET:定义变量简化公式,起始值是你要开始查找的单元格(比如B1),查找区域是A列(匹配键)和B列(返回值)的范围
  • SCAN:递归生成匹配路径,SEQUENCE(100)设置最大递归次数(可根据实际数据量调整,避免无限循环),每次用当前值在A列查找对应B列值,找不到则返回空
  • INDEX+MATCH:定位路径中第一个空值的前一位,即为最终的无后续匹配的值

方案二:旧版Excel(无动态数组支持)

用辅助列+LOOKUP组合实现,操作更直观:

  1. 添加辅助列:

    • 在C1输入=B1
    • 在C2输入公式并下拉直到出现空值:
      =IFERROR(VLOOKUP(C1,A:B,2,FALSE),"")
      

    辅助列会依次生成匹配链:B1 → 匹配到的B值 → 下一个匹配值 → ... → 空值

  2. 提取最终值:
    在任意单元格输入公式,获取辅助列最后一个非空值:

    =LOOKUP(2,1/(C:C<>""),C:C)
    

说明:

  • LOOKUP(2,1/(C:C<>""),C:C)的原理是:1/(C:C<>"")会把非空单元格转为1,空单元格转为错误值;LOOKUP会忽略错误值,找到最后一个1对应的C列值

内容的提问来源于stack exchange,提问作者Hari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:05:03