我在 Excel 中有两列,其中包含逐步淘汰和逐步引入的项目:
我正在尝试编写一个公式,当我在另一个单元格中输入项目代码时,它会返回最新的项目代码。
示例:
如果我插入 AAAAAAAAA
它应该返回 CCCCCCCCC
,或者如果我写 GGGGGGGGG
它应该返回:DDDDDDDDD
.
我尝试使用MATCH
功能和VLOOKUP
但什么也没发现。
最佳答案
我发现您还没有得到任何答复,所以让我澄清一下我的评论。在我看来,你需要某种形式的递归;一个非常适合可以调用自身的 LAMBDA()
的机制。 MS 设计了一个有用的辅助函数,名为 REDUCE()
:
E2
中的公式:
=LET(X,$A$2:$A$5,Y,$B$2:$B$5,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()
将运行直到第二个参数中给出的矩阵的最末尾。对于非常广泛的数组,这可能需要比实际需要更多的处理时间。想象一下,当第二行数据中只找到 1 个新项目时,运行 10k 行。因此,您也可以编写自己的递归函数。这可以通过两种方式完成:
- 管理器中的命名函数,用于在单元格中调用;
- 通过使用
LET()
。
第二个选项是我个人的偏好,例如在 E2
中:
=LET(NEWEST,LAMBDA(ME,TXT,IF(COUNTIF(A$2:A$5,TXT),ME(ME,XLOOKUP(TXT,A$2:A$5,B$2:B$5,,0)),TXT)),NEWEST(NEWEST,D2))
尽管更加冗长,但这可能需要更少的资源,具体取决于您的数据,因为当找不到更多新值时,它会停止递归调用。
关于excel - 在 2 列前任-后继列表中查找最新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71627425/