见下文修订解决方案:
我已为包含原始数据的列表命名为“Look_Rng”。
我的逻辑是结合使用MID、LEN和FIND函数来提取数字范围和一个来自原始范围的文本范围:
号码范围:{=--MID(Look_Rng,FIND(":",Look_Rng)+1,LEN(Look_Rng)-FIND(":",Look_Rng))}
这将返回 {1;20;300;3;2}
文本范围:{=MID(Look_Rng,MIN(IFERROR(FIND(D2,Look_Rng),33000)),LEN(D2))}
这将返回 {"AA";"oo";"CC";"e.";"lo"}
然后使用 MATCH 函数查找给定名称在文本范围内的位置。例如,如果您在 Text Range 中查找 CC,它将返回 3。
最后,使用INDEX函数定位Number Range中对应位置的值。比如CC在Text Range中的第3位,所以它在Number Range中的对应位置是 300。
完整的公式很长,您必须在退出公式时按Ctrl+Shift+Enter 使其生效,因为它是一个数组公式。
{=INDEX(--MID(Look_Rng,FIND(":",Look_Rng)+1,LEN(Look_Rng)-FIND(":",Look_Rng)),MATCH(D2,MID(Look_Rng,MIN(IFERROR(FIND(D2,Look_Rng),33000)),LEN(D2)),0))}
如果您还有其他问题,请告诉我。
附:我同意@ForwardEd 的观点,如果您使用几个帮助列来分解原始数据并使用简单的 INDEX+MATCH 或 VLOOKUP 来查找值,会容易得多。无论如何,我的回答使用了相同的逻辑。