我在单元格A1:A13
中有以下文字。我想从字符串中提取最后一个数字。正如您所看到的,一些字符串包含多个数字,一些包含前导零,一些包含斜杠空格,另一些包含斜杠,一些以文本结束,而另一些则不包含斜杠。
我更喜欢使用公式,而不是使用VBA脚本。
MC HOPE /0217 MC HOUSTON (BTL-020) / 2737 MC HWY 69 S. [ALLTEL] /5910 MC I-475 & HAMILTON / 0380 [EBH] MC I496 EAST / 0415 [ON-NET FIBER - 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编辑
每条评论:“有些项目有多个斜杠。”
答案 0 :(得分:2)
如果数字是唯一可以在数字后面立即出现并且数字中有不确定数字位数的数字,则可以使用以下公式:
=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
答案 1 :(得分:2)
可能有一个更有效的公式,但在Santosh的解决方案的基础上,这个公式将数字转换为十六进制并返回到十进制,通过删除前导零。
=HEX2DEC(DEC2HEX(MID(A1,SEARCH("/",A1)+1,5),4))
编辑以解决多个斜杠:
解决方案#1
=HEX2DEC(DEC2HEX(MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5),4))
解决方案#2
正如pnuts *1
所指出的那样,可以取代HEX2DEC和DEC2HEX来缩短公式。
MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5)*1
答案 2 :(得分:2)
我知道你想避免使用VBA但是为了完整性我已经添加了一个解决方案。
优点是您可以使用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
答案 3 :(得分:1)
将此公式用于B1 =MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5)
。拖动它直到结束。然后,您可以手动格式化结果列以删除前导零。
答案 4 :(得分:0)
尝试一下(放入B1):
=1*LEFT(TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)),4)