在字符串末尾获取数字

时间:2016-03-25 15:11:25

标签: excel

字符串是混合的字母和数字,但字符串末尾总是有一组数字。

应忽略字符串中间的任何前导数字或数字。我提出了:

Public Function trailing(S As String) As Long
    Dim r As String
    Dim i As Long

    For i = Len(S) To 1 Step -1
        If IsNumeric(Mid(S, i, 1)) Then
            r = Mid(S, i, 1) & r
        Else
            Exit For
        End If
    Next i
    trailing = CLng(r)
End Function

似乎有效:

enter image description here

但是,用户正在使用 .xlsx 并且无法使用UDF。是否有一个公式得到相同的结果?
提前谢谢

3 个答案:

答案 0 :(得分:5)

在单元格B1中并向下复制:

=--RIGHT(A1,LOOKUP(2,1/(ISNUMBER(--RIGHT(A1,ROW($1:$15)))),ROW($1:$15)))

只需确保$1:$15中的15将大于任何给定字符串的最大可能结束位数。不需要数组公式条目,也不需要帮助列。

备用版本,因此您不必重复ROW($1:$15)

=--RIGHT(A1,MATCH(TRUE,INDEX(ISERROR(--RIGHT(A1,ROW($1:$15))),),0)-1)

答案 1 :(得分:1)

好吧,请耐心等待......这很难看,可能有机会清理它(或者更好的方法完全利用相同的概念),因为你已经知道这是一个更好的RegEx候选者/ VBA,我们同意更好的方法,但根据你的问题的标准/限制,我们在这里......

由于您说长度在2到12之间变化,我们可以在12列B-M中创建一组数组公式,其中提取1,2 {,...,12个字符的RIGHT()因此。我们使用VALUE对其进行换行,以便为非数字返回错误#VALUE! - 注意:首先选择单元格B2:M2,输入公式=VALUE(RIGHT(A2, {1,2,3,4,5,6,7,8,9,10,11,12}))即可输入此公式然后必须 CTRL + SHIFT + ENTER

然后,我们在COLUMN O中找到第一个错误的位置,并使用MATCH()公式查找使用TRUE的另一个数组公式的第一个ISERROR()

我们通过对1-12列的位置做一个索引来获得解决方案,该列返回它找到的第一个错误旁边的列。这是因为您知道A列总是以数字结尾。

<强> N.B。由于您指定它最后只是一个4位数字字符串,因此您可以将此方法减少到前4列;也就是说,而不是使用12列,只需使用列B:E并继续如上所述。

Excel

最后,我们请求客​​户/客户考虑.xlsm工作簿/ VBA / RegEx或其他解决方案......

答案 2 :(得分:1)

另一种可能的解决方案:

=AGGREGATE(14,6,--RIGHT(A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

在某些情况下,它可能会给出错误的结果:

aaa12.1 bc1E+13

作为一种变通方法,您可以使用SUBSTITUTE替换输入字符串中的Ee.(也可能是,和空格)