您好我想在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...
谢谢!!!
答案 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)))