从文本string中提取最后一个数字
在单元格A1:A13
有以下文本。 我想从string中提取最后一个数字。 正如你所看到的,一些string包含了几个数字,其中一些带有前导零,一些带有斜线空格,另外一些string只带有斜线,一些字符以其他字符结尾。
我宁愿用公式来做这件事,而不是使用VBA脚本。
MC HOPE / 0217 MC休斯顿(BTL-020)/ 2737 MC HWY 69 S. [ALLTEL] / 5910 MC I-475&HAMILTON / 0380 [EBH] MC I496 EAST / 0415 [在线纤维 - EBH] MC I675 / 0267 MC I-675 HERZNER [ALLTEL] / 0249 MC I-69&BROADWAY [ALLTEL] / 5404 MC I69&DORT HWY / 0309 [EBH] MC I69&GRAND TRAVERSE / 0384 [EBH] MC I69&I94 / 2472 MC I69&I94 II [ALLTEL] / 5847 MC I69&M15 / 0327
应该拿出来:
217 2737 5910 380 415 267 249 5404 309 384 2472 5847 327
不从OP编辑
每个评论:“有些项目有多个斜线。”
如果数字是在数字后面紧跟的唯一数字,并且数字中的位数不确定,则可以使用以下公式:
=MID(A1,FIND("/",A1)+1,IFERROR(FIND("[",A1,FIND("/",A1))-FIND("/",A1)-1,LEN(A1)))*1
编辑:对于多个正斜杠,你可以试试这个“怪物”公式:
=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))))+1,IFERROR(FIND("[",A2,FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,"/","")))))-FIND(CHAR(1),SUBSTITUTE(A2,"/",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))))-1,LEN(A2)))*1
我知道你想避免VBA,但为了完整性,我添加了一个解决scheme。
好处是你可以使用正则Regex
,这是非常适合你的任务。 它的工作基于您提供的数据集。
Sub GetLastDigits() Dim Entries As Range, entry As Range Dim RegEx As Object, Matches As Object, Match As Object Set Entries = Range("A1:A12") //Set this as per your s/sheet set-up Set RegEx = CreateObject("vbscript.regexp") With RegEx .MultiLine = False .Global = True .IgnoreCase = True .Pattern = "(\d+)" //Match any set of digits End With For Each entry In Entries Set Matches = RegEx.Execute(entry) If VBA.Left(Matches(Matches.Count - 1), 1) = 0 Then entry.Offset(0, 1) = VBA.Right(Matches(Matches.Count - 1), Len(Matches(Matches.Count - 1)) - 1) Else entry.Offset(0, 1) = Matches(Matches.Count - 1) End If Next entry End Sub
有可能是一个更有效的公式,但build立在Santosh的解决scheme此公式将数字转换为hex,并回到十进制,通过删除前导零。
=HEX2DEC(DEC2HEX(MID(A1,SEARCH("/",A1)+1,5),4))
编辑来解决多个斜杠:
解决scheme#1
=HEX2DEC(DEC2HEX(MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5),4))
解决scheme#2
正如pnuts *1
所指出的,可以取代HEX2DEC和DEC2HEX来缩短公式。
MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5)*1
=MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5)
。 拖动它直到结束。 然后,您可以手动格式化结果列以删除前导零。
试试这个(放在B1中):
=1*LEFT(TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)),4)