鉴于下表:
如果Depends列为空(简单),我希望实际开始显示首选开始值。
如果Depends列包含一个或多个以逗号分隔的Id值,我想在逗号上拆分,根据相应的Id值查找“Preferred Start”值数组,然后选择最大值。 / p>
以下公式将正确拆分“取决于”单元格:
=FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s")
可以通过使用数组值MAX函数(返回“4”)来验证:
={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号码的“首选开始”(1月17日,1月17日)。
如果不诉诸VBA,我是否正在努力做到这一点?我怀疑我实际上会遇到一个循环引用,因为我真的需要采用“实际开始”的最大值(根据依赖性进行调整),以正确地级联一系列依赖项。
由于
答案 0 :(得分:1)
这是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
函数只会找到每个ID的第一个匹配
....或者对于完全不同的方法,您可以使用AGGREGATE
函数(和SEARCH
而不是FILTERXML
),这不需要“数组输入”并且会返回即使ID重复,也是正确的MAX
,即
=AGGREGATE(14,6,Table1[Preferred Start]/SIGN(SEARCH(","&Table1[Id]&",",","&G6&",")),1)
答案 1 :(得分:0)
重新排列匹配项以包含其中的最大值:
=INDEX(Table1[Preferred Start],MATCH(MAX((FILTERXML("<t><s>"&SUBSTITUTE(G6,",","</s><s>")&"</s></t>","//s"))),Table1[Id],0))
使用Ctrl-Shift-Enter输入数组公式。