在 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))
虽然冗长得多,但根据您的数据,这可能会占用更少的资源,因为当找不到更多新值时,它会停止递归调用。
我在 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))
虽然冗长得多,但根据您的数据,这可能会占用更少的资源,因为当找不到更多新值时,它会停止递归调用。