请教EXCEL中在一个字符串中提取字符串到指定多个的位置?

请教EXCEL中在一个字符串中提取字符串到指定多个的位置。
比如(A-B-C-D)(A,B,C,D这几个字符串长度不一,且不一样的,也有可能为空。
“-”是定变的,但是数量不同,输出位置不同(如A到A2,C到A3,B到A5,等等)

假设有特殊符号,截取特殊符号前后数字或者文本。

可用函数LEFT/RIGHT结合FIND,查找到斜杠之前/之后的数字进行提取。



如果要截取指定位数开始后几位,那么可用MID函数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-21
"A" A2=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",20)),1,20))
"C" A3=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",20)),31,20))
"B" A5=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",20)),21,20))
"D" A7=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",20)),41,20))追问

部分能实现,部分不能实现,(比如这串字符串:HID-D2S-15000K-001).就是A.B能实现,C,D不能实现,还有字符串不一定是就这几个,有时候还有更多

追答

其实A2就是基本的公式,要按A1的字符个数(或说长度)来设计公式。如果取值错误的话,只要将公式里的“20”放大即可
由于输出的位置不连贯,不方便公式的拉动填充,可考虑使用辅助列
如C列作为辅助列,C1输入公式
=TRIM(MID(SUBSTITUTE($A$1,"-",REPT(" ",100)),ROW(A1)*100-99,100))
下拉至C10,这应该足够了吧?
再在你要输出的单元格分别对C列取值就简单多了
如 A2 =C1
A3 =C3
A5 =C2


追问

TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",100)),ROW(A$1)*100-99,100))这是我修改后的,你看看行么,参考你的思路把列改成行,我考虑的是,那个100的数值是什么意思,能不能用LEN函数代替

追答

你只要试一下 =SUBSTITUTE($A$1,"-",REPT(" ",100)) 就知道这100是怎么回事了
将A1里的短横,全用100个空格来替换

如果要用LEN代替也可以啊

=TRIM(MID(SUBSTITUTE($A$1,"-",REPT(" ",LEN(A$1))),ROW(A1)*(LEN(A$1))-(LEN(A$1)-1),LEN(A$1)))
下拉即可

你上面修改的公式,(SUBSTITUTE($A1 这个$A1应该是 A$1才方便下拉公式填充吧,要不然下拉后就不是在A1取值了

PS:公式好用的话请选为最佳答案啊 -_-|||

追问

对单个还行,对一列数据呢,

追答

那就提取到同一行的右边

如数据在A列
B1输入公式
=TRIM(MID(SUBSTITUTE($A1,"-",REPT(" ",LEN($A1))),COLUMN(A1)*(LEN($A1))-(LEN($A1)-1),LEN($A1)))
下拉再右拉

追问

谢谢,这次就好了。
能提取出来了。
还有一步骤就是判断了,是否是需要的字符串,怎么做,

追答

大哥,你不能一次过把话说完么。。。。
判断是否是需要的条件是什么?

追问

你是师傅啊,我在向你请教呢,
判断语句描述出来就是:
第一层:判断(前面拉出来的:F1:G1)子数据,是否包含在(如:数据表!$J$1:数据表!L$1)母数据中,如果包含就返回当前值,如果没就为空。
第二层如果第一次层都是空那么(H1=数据表!M1)否则((H1=数据表!M1)+H1)

追答

又回到最初的问题上去了,你这种搞法纯粹是。。。。
第一行拉出来的提取值,不要再动了,就当是辅助列。
如何判断的公式,放在第二行。
如你所主的第一层。在F2输入公式
=IF(COUNTIF(数据表!$J$1:L$1,F1)>0,F1,"")
右拉至G2

第二层,在H2输入公式
=IF(AND(F2="",G2=""),数据表!M1,数据表!M1+H1)

本回答被提问者采纳
相似回答