查找来自串联string的索引/匹配数组的最大值

鉴于下表:

在这里输入图像说明

如果Depends列为空(简单),我希望实际开始显示首选开始值。

如果Depends列包含一个或多个以逗号分隔的Id值,我想以逗号分隔,根据相应的Id值查找“Preferred Start”值的数组,然后select最大值。

下面的公式将正确拆分“取决于”单元格:

=FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s") 

可以通过使用数组值的MAX函数(返回“4”)来validation:

 ={MAX((FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s")))} 

不过,我真正想要做的是:

 ={MAX(INDEX(Table1[Preferred Start],MATCH((FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s")),Table1[Id],0)))} 

然而在某处,它丢失了“数组”,并简单地返回分割的第一个Id号的“首选开始”(Id 3,17 Jan 18)。

我正试图甚至可以不诉诸VBA? 我怀疑我会遇到一个实际的循环引用,因为我真的需要最大限度地利用“实际开始”(针对依赖关系进行调整),以正确地级联一系列依赖项目。

谢谢

这是INDEX一个已知问题,它不愿意在没有任何协同的情况下返回一个数组。 一般来说,这应该工作

=INDEX(range,N(IF(1,{array})))

所以,成为以下与您的具体情况

=MAX(INDEX(Table1[Preferred Start],N(IF(1,MATCH((FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s")),Table1[Id],0)))))

CTRL + SHIFT + ENTER确认

我假设每一行都有不同的ID号码,因为MATCHfunction只能find每个ID的第一个匹配

….或者对于一个完全不同的方法,你可以使用AGGREGATE函数(和SEARCH而不是FILTERXML ),它不需要“数组入口”,即使ID重复也会返回正确的MAX

=AGGREGATE(14,6,Table1[Preferred Start]/SIGN(SEARCH(","&Table1[Id]&",",","&G6&",")),1)

重新排列匹配以包含最大值:

 =INDEX(Table1[Preferred Start],MATCH(MAX((FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s"))),Table1[Id],0)) 

使用Ctrl-Shift-Enter作为数组公式input。