获取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
作为解决方法,您可以使用SUBSTITUTE
replaceE
, e
和.
(也许还有,
和空间)在另一个字母的inputstring。