在 2 列前任-后继列表中查找最新项目

Find the newest item in a 2 columns predecessor-successor list

我在 Excel 中有两列逐步淘汰和逐步采用的项目:

Old item New item
AAAAAAAAA BBBBBBBBB
GGGGGGGGG DDDDDDDDDD
BBBBBBBBB KKKKKKKKKK
KKKKKKKKK CCCCCCCCCC

我正在尝试编写一个公式,当我在另一个单元格中输入项目代码时,它 return 是最新的。

示例: 如果我插入 AAAAAAAAA 它应该 return CCCCCCCCC,或者如果我写 GGGGGGGGG 它应该 return: DDDDDDDDD.

我尝试使用 MATCH 函数和 VLOOKUP 但没有任何结果。

我看到你还没有得到任何答复,所以让我澄清一下我的评论。在我看来,您需要某种形式的递归;一个非常适合 LAMBDA() 的机制,可以调用自己。 MS 设计了一个有用的辅助函数,叫做 REDUCE():

E2中的公式:

=LET(X,$A:$A,Y,$B:$B,REDUCE(D2,X,LAMBDA(a,b,FILTER(Y,X=a,a))))

或者,如果您想对要查找的整个项目范围进行相同的计算:

E2中的公式:

=BYROW(D2:D3,LAMBDA(Z,LET(X,A2:A5,Y,B2:B5,REDUCE(Z,X,LAMBDA(a,b,FILTER(Y,X=a,a))))))

重要提示:

REDUCE() 将 运行 直到第二个参数中给出的矩阵的末尾。对于非常广泛的阵列,这可能需要比必要时更多的处理时间。想象一下 运行ning 10k 行,当在第二行数据中只找到 1 个新项目时。因此,您也可以编写自己的递归函数。这可以通过两种方式完成:

  • 管理器中用于在单元格中调用的命名函数;
  • 通过使用LET().

这第二个选项有我个人的偏好,例如 E2:

=LET(NEWEST,LAMBDA(ME,TXT,IF(COUNTIF(A:A,TXT),ME(ME,XLOOKUP(TXT,A:A,B:B,,0)),TXT)),NEWEST(NEWEST,D2))

虽然冗长得多,但根据您的数据,这可能会占用更少的资源,因为当找不到更多新值时,它会停止递归调用。