我怎样才能在Excel中结合多个嵌套的替代函数?

我试图设置一个函数来重新格式化一个string,稍后将被连接起来。 一个string示例如下所示:

Standard_H2_W1_Launch_123x456_S_40K_AB 

尽pipe有时候“ S ”不存在,有时“40K”是“60K”或者不存在,“_AB”也可能是“_CD”或“EF”。 最后,所有的下划线都需要改成连字符。 最终产品应该是这样的:

 Standard-H2-W1-Launch-123x456- 

我有四个function,如果一个接一个地运行,将会照顾所有这些:

 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_") =SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","") =SUBSTITUTE(C2,"_S_","_") =SUBSTITUTE(D2,"_","-") 

我已经尝试了将这些function合并到一个function中的多种方法,但是我对这个级别的excel相对比较陌生,所以我不知所措。 无论如何要结合所有这一切,以便它在一个单元格中执行一个命令之后?

谢谢你的帮助!

简单地把它们组合起来,你可以把它们放在一起,像这样:

 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-") 

(请注意,这可能会传递7个嵌套语句的Excel限制,我正在Excel 2010中进行testing


另一种方法是利用LeftRightfunction。

这假设在最后的变化的数据总是存在,并且是8个字符长

 =SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-") 

这将实现相同的结果string


如果string不总是以8个字符结束,您可以search“_S”并获取当前位置。 尝试这个:

 =SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-") 

我会用下面的方法:

 =SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-") 

其中X表示你没有的东西的长度。 而且,我会使用X

 (ISERROR(FIND("_S",A2,1))*2)+ (ISERROR(FIND("_40K",A2,1))*4)+ (ISERROR(FIND("_60K",A2,1))*4)+ (ISERROR(FIND("_AB",A2,1))*3)+ (ISERROR(FIND("_CD",A2,1))*3)+ (ISERROR(FIND("_EF",A2,1))*3) 

上面的ISERROR(FIND("X",.,.))*x将返回0,如果找不到X则返回xX的长度)。 所以从技术上讲,你可能会在右边修剪A2

这种方法比上述另一种方法的优点是更清楚什么替代(或删除)正在发生,因为“替代”不是嵌套的。

感谢打破公式维尔纳的想法!

使用Alt + Enter可以将复杂的替代公式的每一位放在不同的行上:当按下Enter时,它们变得更容易跟随并自动排队。

只要确保您有足够的结束语句来匹配substitute(的数量substitute(单元格引用的任一侧的行数)。

正如在这个例子中:

 = substitute( substitute( substitute( substitute( B11 ,"(","") ,")","") ,"[","") ,"]","") 

变为:

 = SUBSTITUTE( SUBSTITUTE( SUBSTITUTE( SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","") 

它可以正常工作,但总是可以手动删除多余的段落:

 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","") 

名称>替代()

[美属萨摩亚]>美属萨摩亚