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

如何为列中每行生成上一个匹配项的索引(忽略空值)

实现非空条目上一个匹配实例的索引数组

需求概述

生成动态数组,存储列中每个非空条目对应的上一个相同值的索引,空条目返回空值。

现有公式(可运行但繁琐)

=LET(s,SEQUENCE(ROWS($E$4#)),BYROW(s,LAMBDA(r,LET(b,INDEX($E$4#,r),IF(b<>"",XMATCH(1,(s<r)*($E$4#=b),,-1),"")))))

简化实现方案

方案1:MAP + XMATCH(推荐,简洁高效)

利用XMATCH的反向搜索特性,直接限定搜索范围为当前行之前的区域,无需构建辅助布尔数组:

=MAP($E$4#,SEQUENCE(ROWS($E$4#)),LAMBDA(val,row_num,
    IF(val="","",XMATCH(val,$E$4#,,,-1,row_num-1))
))

说明

  • MAP遍历每个值和对应行号,逻辑更直白
  • XMATCH的-1参数表示从后往前搜索,row_num-1限定只搜索当前行之前的内容,直接返回上一个匹配的索引

方案2:SCAN 累积追踪(适合理解状态维护逻辑)

通过SCAN维护每个值的最后出现索引,逐行生成结果:

=LET(rng,$E$4#,
     seq,SEQUENCE(ROWS(rng)),
     result,SCAN(,seq,LAMBDA(acc,row,
        LET(val,INDEX(rng,row),
            IF(val="","",
               LET(last_idx,XLOOKUP(val,INDEX(rng,1:row-1),seq,,-1,2),
                   HSTACK(acc,last_idx)
               )
            )
        )
     )),
     DROP(result,,1)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:22:48