如何查找包含相同数据的上一行?Excel向上匹配相同值的公式咨询
解决Excel向上查找上一个匹配值的问题
嘿,这个场景我太熟悉了!XLOOKUP默认是从区域起始位置往下搜索,确实没法直接从当前位置向上找最近的匹配值,不过咱们有几个非常实用的公式方案,完美解决这个需求:
方案1:INDEX + MAX + IF(兼容新旧Excel版本)
如果要返回上一个值为1的单元格内容,用这个公式:
=INDEX(A:A,MAX(IF(A$1:A6=1,ROW(A$1:A6),0)))
- 原理:
IF(A$1:A6=1,ROW(A$1:A6),0)会把A1到A6中所有值为1的单元格行号保留,其他位置返回0;MAX提取其中最大的行号(也就是离当前A7最近的那个1的位置);最后INDEX从A列中取出对应行的内容。 - 注意:在旧版Excel(非365/2021)中,输入完公式后需要按
Ctrl+Shift+Enter作为数组公式执行;新版Excel会自动识别数组运算,直接回车即可。
如果想直接返回单元格的地址(比如$A$4),可以套一个CELL函数:
=CELL("address",INDEX(A:A,MAX(IF(A$1:A6=1,ROW(A$1:A6),0))))
方案2:XLOOKUP 反向数组技巧(仅适用于Excel 365/2021)
既然你想用XLOOKUP,咱们可以把搜索区域倒过来,让它从当前位置往前找:
=XLOOKUP(1,INDEX(A$1:A6,SEQUENCE(ROWS(A$1:A6),,ROWS(A$1:A6),-1)),A$1:A6,,0,1)
- 原理:
INDEX(A$1:A6,SEQUENCE(ROWS(A$1:A6),,ROWS(A$1:A6),-1))会把A1:A6的内容倒序排列(变成A6、A5...A1),然后XLOOKUP在这个倒序区域里找第一个1,最后返回原区域中对应的单元格内容,刚好就是离A7最近的上一个1。
方案3:LOOKUP 函数简化版(适用于所有版本)
LOOKUP有个“隐藏特性”可以用来找最后一个匹配值,公式更简洁:
=LOOKUP(2,1/(A$1:A6=1),A$1:A6)
- 原理:
1/(A$1:A6=1)会把匹配的位置变成1,不匹配的变成错误值;LOOKUP会忽略错误值,在剩下的1中找到最后一个对应的A列内容,也就是我们要的上一个1。
小提示
把公式中的A$1:A6改成动态引用,公式可以自动适应当前单元格位置,不用手动调整区域:
=LOOKUP(2,1/(A$1:INDIRECT("A"&ROW()-1)=1),A$1:INDIRECT("A"&ROW()-1))
内容的提问来源于stack exchange,提问作者daez12




