22

我正在尝试设置一个函数来重新格式化稍后将被连接的字符串。示例字符串如下所示:

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 还比较陌生,所以我很茫然。有没有办法将所有这些结合起来,以便在一个单元格中一个接一个地执行一个命令?

4

5 回答 5

27

要简单地将它们组合在一起,您可以像这样将它们放在一起:

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

(请注意,这可能会超过 7 个嵌套语句的旧 Excel 限制。我正在 Excel 2010 中进行测试


另一种方法是利用LeftRight函数。

这假设最后的变化数据始终存在并且长度为 8 个字符

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

这将获得相同的结果字符串


如果字符串并不总是以您想要删除的 8 个字符结尾,您可以搜索“_S”并获取当前位置。尝试这个:

=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
于 2014-03-11T00:54:21.693 回答
2

感谢您分解公式Werner的想法!

使用 Alt+Enter 可以将复杂替换公式的每一位放在不同的行中:它们变得更容易理解,并且在按下 Enter 时自动排列。

只需确保您有足够的结束语句来匹配substitute(单元格引用两侧的行数。

如本例所示:

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

变成:

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

可以按原样正常工作,但是始终可以手动删除多余的段落:

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

名称 > 替代()

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

于 2016-10-25T19:06:52.903 回答
2
  • 嵌套SUBSTITUTE()在字符串中可能很讨厌,但是,总是可以安排它:

截图公式栏

于 2018-05-11T07:47:23.330 回答
1

我会使用以下方法:

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

whereX表示你不追求的东西的长度。而且,因为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,如果找到则返回(的长度)。因此,从技术上讲,您正在通过可能的匹配从右侧进行修剪。XxXA2

这种方法比提到的其他方法的优点是更明显的是正在发生什么替换(或删除),因为“替换”不是嵌套的。

于 2014-03-11T01:56:55.923 回答
-1
=SUBSTITUTE(text, old_text, new_text)

if: a=!, b=@, c=#,... x=>, y=?, z=~, " "="     "
then: abcdefghijklmnopqrstuvwxyz ... try this out
equals: !@#$%^&*()-=+[]\{}|;:/<>?~     ...     ;}?     ;*(|     ]:;

规则:

(1) 要替换的文本在单元格 A1
(2) 最多 64 个替换级别(下面的公式只有 27 个级别 [字母 + 空格])
(2) “old_text”也不能是“new_text”(即:如果 a= z .: z 不能是“旧文本”)

---so if a=z,b=y,...y=b,z=a, then the result is 
---abcdefghijklmnopqrstuvwxyz = zyxwvutsrqponnopqrstuvwxyz (and z changes to a then changes back to z) ... (pattern starts to fail after m=n, n=m... and n becomes n)

公式为:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"a","!"),"b","@"),"c","#"),"d","$"),"e","%"),"f","^"),"g","&"),"h","*"),"i","("),"j",")"),"k","-"),"l","="),"m","+"),"n","["),"o","]"),"p","\"),"q","{"),"r","}"),"s","|"),"t",";"),"u",":"),"v","/"),"w","<"),"x",">"),"y","?"),"z","~")," ","     ")
于 2019-11-15T19:44:41.243 回答