如何从Excel中的字符串中提取字符

时间:2017-10-17 14:14:47

标签: excel

您好我想在Excel中动态提取字符串中的数字。

我有以下字符串,我想只有“.pdf”之前的数字。从字符串中取出进入下一列。

正如您所看到的,字符数因行而异。

我发明了这样的东西:

=MID(M20;SEARCH("_";M20);20)

但是这只取出了之后“_”和.pdf之后的数字....

如何按我喜欢的方式制作?

D:\Users\xxxx\Desktop\1610\ts25b_4462.pdf    
D:\Users\xxx\Desktop\1610\ts02b_39522.pdf
D:\Users\xxxxx\Desktop\1610\ts02b_except_39511.pdf
D:\Users\xxxx\Desktop\1610\ts02b_except_39555.pdf    
D:\Users\xxxx\Desktop\1610\ts22b_6118.pdf

所以我只是:

4462    
39522    
39511    
39555    
6118     
and so on...

谢谢!!!

4 个答案:

答案 0 :(得分:2)

使用VBA,尝试这样做:

Public Function splitThings(strInput As String) As String

    splitThings = Split(Split(strInput, "_")(1), ".")(0)

End Function

关于您的公式,请尝试使用=LEFT(MID(M20;SEARCH("_";M20);20),K),其中K是ts22b_6118.pdf和4 (.pdf)长度的差异。 4是.pdf的长度。 这样的事情应该做的工作:

=LEFT(MID(I3,SEARCH("_",I3)+1,LEN(I3)),LEN(MID(I3,SEARCH("_",I3),LEN(I3)))-5)

答案 1 :(得分:1)

您应该使用Excel公式。例如:

=SUBSTITUTE(LEFT(A1,FIND(".pdf",A1)-1),LEFT(A1,FIND("_",A1)),"")

使用第一行作为示例,使用LEFT(A1,FIND(".pdf",A1)-1),您将拥有D:\ Users \ xxxx \ Desktop \ 1610 \ ts25b_4462以及LEFT(A1,FIND("_",A1)) D:\ Users \ xxxx \ Desktop \ 1610 \ ts25b_,如果你用“”替换第一部分你将有4462。

希望这可以提供帮助。

答案 2 :(得分:0)

使用此公式,您应该能够获得所需的数字:

=MID(A1,FIND("|",SUBSTITUTE(A1,"_","|",LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))))+1,FIND(".",A1)-FIND("|",SUBSTITUTE(A1,"_","|",LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))))-1)

基本上,这是最初的公式:

=MID(A1,FIND("_",A1)+1,FIND(".",A1)-FIND("_",A1)-1)

但是因为字符串中可能有两个_所以这是找到第二个_的那个:{/ p>

=SUBSTITUTE(A1,"_","|",LEN(A1)-LEN(SUBSTITUTE(A1,"_","")))

现在只需将此SUBSTITUTE替换为上面的A1即可获得那么长的公式。希望这会有所帮助。

答案 3 :(得分:0)

这将返回您想要的数字而不管扩展名(可能是.pdf,可能是.xlsx等),而不管文件名和/或文件路径中是否存在下划线数量:

=TRIM(LEFT(RIGHT(SUBSTITUTE(SUBSTITUTE(M20,".",REPT(" ",LEN(M20))),"_",REPT(" ",LEN(M20))),LEN(M20)*2),LEN(M20)))