从连续字符串中查找索引/匹配数组的最大值

时间:2017-11-19 18:38:59

标签: arrays excel excel-formula

鉴于下表:

enter image description here

如果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,我是否正在努力做到这一点?我怀疑我实际上会遇到一个循环引用,因为我真的需要采用“实际开始”的最大值(根据依赖性进行调整),以正确地级联一系列依赖项。

由于

2 个答案:

答案 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输入数组公式。

相关问题