[英]How can I combine multiple nested Substitute functions in Excel?
我正在尝试设置一个函数来重新格式化稍后将被连接的字符串。 示例字符串如下所示:
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)
如果X
没有找到,上面的ISERROR(FIND("X",.,.))*x
将返回 0,如果找到,则返回x
( X
的长度)。 因此,从技术上讲,您正在使用可能的匹配项从右侧修剪A2
。
这种方法的优点是比其他方法更明显的是正在发生什么替换(或删除),因为“替换”不是嵌套的。
=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","~")," "," ")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.