1

我在单元格中有以下文本A1:A13。我想从字符串中提取最后一个数字。如您所见,有些字符串包含多个数字,有些带有前导零,有些带有斜线空格,有些只有斜线,有些以文本结尾,有些则没有。

我宁愿用公式来做这件事,而不是使用 VBA 脚本。

MC希望/0217
MC 休斯顿 (BTL-020) / 2737
MC HWY 69 S. [ALLTEL] /5910
MC I-475 和汉密尔顿 / 0380 [EBH]
MC I496 EAST / 0415 [ON-NET FIBER - EBH]
MC I675 / 0267
MC I-675 赫兹纳 [ALLTEL] /0249
MC I-69 和百老汇 [ALLTEL] /5404
MC I69 & DORT HWY / 0309 [EBH]
MC I69 和大穿越 / 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 编辑

每条评论:“有些项目有不止一个斜线。”

4

5 回答 5

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
于 2013-09-24T19:05:07.000 回答
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
于 2013-09-24T18:24:03.293 回答
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
于 2013-09-24T18:24:18.073 回答
1

将此公式用于 B1 =MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))+1,5)。拖到最后。然后您可以手动格式化结果列以删除前导零。

在此处输入图像描述

于 2013-09-24T18:15:25.860 回答
0

试一试(放入 B1):

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

于 2013-09-25T11:24:03.393 回答