从文本字符串中提取最后一个数字

时间:2013-09-24 18:05:35

标签: excel excel-2010

我在单元格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编辑

每条评论:“有些项目有多个斜杠。”

5 个答案:

答案 0 :(得分:2)

如果数字是唯一可以在数字后面立即出现并且数字中有不确定数字位数的数字,则可以使用以下公式:

=MID(A1,FIND("/",A1)+1,IFERROR(FIND("[",A1,FIND("/",A1))-FIND("/",A1)-1,LEN(A1)))*1

enter image description here

编辑:对于多个正斜杠,您可以尝试这个'怪物'公式:

=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)。拖动它直到结束。然后,您可以手动格式化结果列以删除前导零。

enter image description here

答案 4 :(得分:0)

尝试一下(放入B1):

=1*LEFT(TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)),4)