查找来自串联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号码,因为MATCH
function只能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。