我正在尝试设置一个函数来重新格式化一个稍后将被连接的字符串。示例字符串如下所示:
Standard_H2_W1_Launch_123x456_S_40K_AB
虽然有时“S”不存在,有时“40K”是“60K”或不存在,“_ AB”也可以是“_CD”或_“EF”。最后,所有下划线都需要更改为连字符。最终产品应如下所示:
Standard-H2-W1-Launch-123x456-
我有四个函数,如果一个接一个地运行将负责所有这些:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")
=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")
=SUBSTITUTE(C2,"_S_","_")
=SUBSTITUTE(D2,"_","-")
我已经尝试了将这些组合成一个函数的多种方法,但我对这个级别的excel相对较新,所以我很茫然。无论如何要将所有这些结合起来,以便它在一个单元格中执行另一个命令吗?
要简单地将它们组合起来,你可以像下面这样将它们放在一
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")
(请注意,这可能会超过7个嵌套语句的旧Excel限制。我正在Excel 2010中进行测试
另一种方法是利用Left
和Right
函数。
这假设末端的数据变化始终存在且长度为8个字符
=SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-")
这将实现相同的结果字符串
如果字符串并不总是以您要剥离的8个字符结尾,则可以搜索“_S”并获取当前位置。试试这个:
=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
感谢分解公式Werner的想法!
使用Alt + Enter可以将复杂替代公式的每个位放在不同的行上:它们变得更容易跟随并在按下Enter时自动排列。
只要确保你有足够的结束语句来匹配单元格引用任一侧的substitute(
行数。
如下例所示:
=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")
变为:
=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
它可以正常工作,但总是可以手动删除额外的段落:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
名称>替代()
[美属萨摩亚]>美属萨摩亚
我会使用以下方法:
=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
,则上面的X
将返回0,如果找到x
,则返回X
(A2
的长度)。所以从技术上来说,你可以用正确的比赛从右边修剪SUBSTITUTE()
。
这种方法优于其他提到的方法的优点是更明显的是替换(或删除)正在发生,因为“替换”不是嵌套的。