简单SUMIFS()应该工作,以找到最便宜的路线:
=MIN(SUMIFS(4:4,3:3,"*" & {"B","C"}&"*",4:4,"<>999999"))
然后一个INDEX/MATCH找到地点:
=INDEX({"B","C"},MATCH(MIN(SUMIFS(4:4,3:3,"*" & {"B","C"} & "*",4:4,"<>999999")),SUMIFS(4:4,3:3,"*" & {"B","C"} & "*",4:4,"<>999999"),0))
编辑
要做到你想要的公式,on就需要另一个表。在一列中列出所有可能的位置。
在第二列中使用此公式找到,如果它是只有起点和没有业务流到或通过它:
=COUNTIFS($3:$3,"*" & A6,$4:$4,"<>999999")>2
现在我们可以从上方稍微修改公式引用这个新表并获得正确答案:
现在这些数组公式:
最便宜的路线的值:
=MIN(IF(B6:B8,SUMIFS(4:4,3:3,"*" & IF(B6:B8,A6:A8)&"*",4:4,"<>999999"),999999))
最便宜的位置的名称:他们需要与退出编辑时按Ctrl-Shift键,回车确认
=INDEX(A6:A8,MATCH(MIN(IF(B6:B8,SUMIFS(4:4,3:3,"*" & IF(B6:B8,A6:A8)&"*",4:4,"<>999999"),999999)),SUMIFS(4:4,3:3,"*" & A6:A8 &"*",4:4,"<>999999"),0))
作为数组公式模式而不是Enter。如果正确完成,Excel将在公式周围放置{}
。
编辑#2
下面是无需工作的助手列公式:
=MIN(IF(COUNTIFS($3:$3,"*" &{"A","B","C"},$4:$4,"<>999999")>2,SUMIFS(4:4,3:3,"*" & IF(COUNTIFS($3:$3,"*" & {"A","B","C"},$4:$4,"<>999999")>2,{"A","B","C"})&"*",4:4,"<>999999"),999999))
和
=INDEX({"A","B","C"},MATCH(MIN(IF(COUNTIFS($3:$3,"*" &{"A","B","C"},$4:$4,"<>999999")>2,SUMIFS(4:4,3:3,"*" & IF(COUNTIFS($3:$3,"*" & {"A","B","C"},$4:$4,"<>999999")>2,{"A","B","C"})&"*",4:4,"<>999999"),999999)),SUMIFS(4:4,3:3,"*" & {"A","B","C"} & "*",4:4,"<>999999"),0))
它们仍然是数组公式,必须用Ctrl-Shift-Enter确认。
会不会是最便宜的A? A + AB + AC + AA = 1220? –
如果您选择A,那么字母“A”必须是结尾字母。就像我在最后有“C”或者在我添加的每个变量中都有。这封信本身必须包含在内,因为这是固定成本。所以,用“A”应该是A + AA = 20,但这不是一个完整的路径。它没有做任何事情。 – DD1
那么为什么BC被添加到B使其大于C?如果你只走过最后一个字母,那么只有B = 1100 –