获取string末尾的数字

string是混合的阿尔法和数字,但总是有一组数字在string的末尾。

string中间的任何前导数字或数字应该被忽略。 我想出了:

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 

它似乎工作:

在这里输入图像说明

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

在单元格B1中复制下来:

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

只要确保$1:$15将大于任何给定string的最大可能结束位数。 没有必要的数组公式input,也没有必要的帮助列。

备用版本,所以你不必重复行ROW($1:$15)

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

好吧,请耐心等待…这很丑陋,可能会有一些机会来清理这个问题(或者使用相同的概念,一个更好的方法),既然您已经知道这是RegEx / VBA更好的select,我们同意采取更好的方法,但在您的问题的标准/限制下,我们走了…

由于你说的长度在2到12之间变化,我们可以在12列中创build一组数组公式,相应地提取1,2,…,12个字符的RIGHT() 。 我们用一个VALUE包装这个返回错误#VALUE! 对于非数值 – 注意:此公式是通过首先select单元格B2:M2 ,input公式, =VALUE(RIGHT(A2, {1,2,3,4,5,6,7,8,9,10,11,12})) ,然后强制性的CTRL + SHIFT + ENTER

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

我们通过做1-12列的索引来获得解决scheme,返回find的第一个错误旁边的列。 这是因为你知道A列总是以数字结尾。

注意:由于您指定最后只有一个4位数字的string,所以您可能会将此方法减less到前4列; 也就是说,而不是使用12列,只需使用列B:E并继续如上所述。

高强

我们最后恳求客户/客户考虑一个.xlsm工作簿/ VBA / RegEx或其他解决scheme…

另一个可能的解

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

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

aaa12.1 bc1E+13

作为解决方法,您可以使用SUBSTITUTEreplaceEe. (也许还有,和空间)在另一个字母的inputstring。