提取excel中特定字符之间的字符串并用逗号分隔
是否有一种方法可以在excel中的特定字符之间提取多个字符串,并用逗号分隔它们 例如: 我感谢每一个帮助 你的问题中没有“提取”,只是删除。下面的公式将不需要的字符替换为“”,从而将其删除。请试一试提取excel中特定字符之间的字符串并用逗号分隔,excel,Excel,是否有一种方法可以在excel中的特定字符之间提取多个字符串,并用逗号分隔它们 例如: 我感谢每一个帮助 你的问题中没有“提取”,只是删除。下面的公式将不需要的字符替换为“”,从而将其删除。请试一试 =SUBSTITUTE(SUBSTITUTE(A2,"[",""),"]","") 你的问题中没有“提取”,只是删除。下面的公式将不需要的字符替换为“”,从而将其删除。请试一试 =SUBSTITUTE(SUBSTIT
=SUBSTITUTE(SUBSTITUTE(A2,"[",""),"]","")
你的问题中没有“提取”,只是删除。下面的公式将不需要的字符替换为“”,从而将其删除。请试一试
=SUBSTITUTE(SUBSTITUTE(A2,"[",""),"]","")
下面需要一个支持动态数组和LET
函数的Excel O365版本
如果我理解正确的话,你正在寻找类似的东西
此公式将使用动态数组函数列出字符串中所有[
的所有位置
=LET(x,$B$2,
y, SEQUENCE(LEN(x)),
raw, IF(MID(x,y,1)="[",y,""),
filtered, FILTER(raw,raw<>"",""),
filtered)
=LET(x,$B$2,
y、 序列(LEN(x)),
原始,如果(中间(x,y,1)=“[”,y,”,
已筛选,筛选(原始,原始“”),
过滤)
LET
允许您使用参数对在公式中设置名称。第一个是名称;第二个是名称的值。最后一个参数是返回的值。在这种情况下,x
被设置为单元格B2
y
被设置为使用t列出从1到x
长度的数字的数组动态数组函数SEQUENCE
raw
是一个列表,如果该位置是<代码>过滤> <代码>使用“代码>过滤器/<代码>函数删除所有空白行。<代码>过滤< /COD>是<代码>的最后一个参数,让函数返回,如果这个公式被输入到Cys<代码> A4<代码>,则<代码> A4< /代码>将显示<代码> 1 ,<代码> A5< /代码>我将显示14
,而A6
将显示28
如果随后在B4
中输入类似的公式,将[
替换为]
,则结果是{7,21,35}
单元格B4
,B5
和B6
最后,在单元格B2
中,您可以输入=TEXTJOIN(“,”,TRUE,MID(A2,A4#+1,B4#-A4#-1))
。这将返回您要查找的结果
如果您不熟悉动态数组,A4#
表示从单元格A4
开始的整个动态数组。在这种情况下,它与A4:A6
相同
以下要求使用支持动态数组和LET
功能的Excel O365版本
如果我理解正确的话,你正在寻找类似的东西
此公式将使用动态数组函数列出字符串中所有[
的所有位置
=LET(x,$B$2,
y, SEQUENCE(LEN(x)),
raw, IF(MID(x,y,1)="[",y,""),
filtered, FILTER(raw,raw<>"",""),
filtered)
=LET(x,$B$2,
y、 序列(LEN(x)),
原始,如果(中间(x,y,1)=“[”,y,”,
已筛选,筛选(原始,原始“”),
过滤)
LET
允许您使用参数对在公式中设置名称。第一个是名称;第二个是名称的值。最后一个参数是返回的值。在这种情况下,x
被设置为单元格B2
y
被设置为使用t列出从1到x
长度的数字的数组动态数组函数SEQUENCE
raw
是一个列表,如果该位置是<代码>过滤> <代码>使用“代码>过滤器/<代码>函数删除所有空白行。<代码>过滤< /COD>是<代码>的最后一个参数,让函数返回,如果这个公式被输入到Cys<代码> A4<代码>,则<代码> A4< /代码>将显示<代码> 1 ,<代码> A5< /代码>我将显示14
,而A6
将显示28
如果随后在B4
中输入类似的公式,将[
替换为]
,则结果是{7,21,35}
单元格B4
,B5
和B6
最后,在单元格B2
中,您可以输入=TEXTJOIN(“,”,TRUE,MID(A2,A4#+1,B4#-A4#-1))
。这将返回您要查找的结果
如果您不熟悉动态数组,A4#
表示从单元格A4
开始的整个动态数组。在这种情况下,它与A4:A6
相同
您不能仅使用Excel 2007中的公式进行此操作。您需要VBA UDF。使用Excel O365具有动态公式访问权限,可以通过以下方式完成此操作:
=TEXTJOIN(", ",TRUE,TRIM(LEFT(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"]",REPT(" ",100)),"[","</s><s> ")&"</s></t>","//s[starts-with(., ' ')]"),100)))
=TEXTJOIN(“,”,TRUE,TRIM(左(FILTERXML(“,”&SUBSTITUTE(SUBSTITUTE(A1,“,”),REPT(“,100)),“[”,”)&“//s[以(,“,”)”)开头,100)))
在Excel 2007中,您不能仅使用公式。您需要VBA UDF。使用Excel O365动态公式访问,可以像以下方式完成此操作:
=TEXTJOIN(", ",TRUE,TRIM(LEFT(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"]",REPT(" ",100)),"[","</s><s> ")&"</s></t>","//s[starts-with(., ' ')]"),100)))
=TEXTJOIN(“,”,TRUE,TRIM(左(FILTERXML(“,”&SUBSTITUTE(SUBSTITUTE(A1,“,”),REPT(“,100)),“[”,”)&“//s[以(,“,”)”)开头,100)))
考虑到您使用的excel版本太旧,缺少动态数组函数,而且还有太多其他有用的函数,您可能需要在这里做一个很长的变通
首先使用substitute
和len
您必须找出每行中此类方括号的数量。然后您必须计算出此类数字的max
公式
像这样做
假设您在A2
中的文本值最多出现4次,请在B2
=SUBSTITUTE(TRIM(REPLACE(LEFT(A2,FIND("]",A2&"]")-1),1,FIND("[",A2&"["),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",2),"]","#",2))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",2),"[","#",2)),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",3),"]","#",3))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",3),"[","#",3)),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",4),"]","#",4))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",4),"[","#",4)),"")), " ", ", ")
假设这是A2中的文本
I have a text [123] and some more [4523] and also [552222] how to extract [22]?
这将在B2
=SUBSTITUTE(TRIM(REPLACE(LEFT(A2,FIND("]",A2&"]")-1),1,FIND("[",A2&"["),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",2),"]","#",2))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",2),"[","#",2)),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",3),"]","#",3))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",3),"[","#",3)),"")&" "&REPLACE(LEFT(A2,FIND("#",SUBSTITUTE(A2&REPT("]",4),"]","#",4))-1),1,FIND("#",SUBSTITUTE(A2&REPT("[",4),"[","#",4)),"")), " ", ", ")
考虑到您使用的excel版本太旧,缺少动态数组函数,而且还有太多其他可用的