Excel 获取字符串末尾的数字

Excel 获取字符串末尾的数字,excel,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

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

字符串中的任何前导数字或数字应被忽略。我想到了:

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。是否有一个公式可以得到相同的结果???
提前感谢

好吧,请耐心听我说……这很难看,可能会有一些机会来解决这个问题(或者是一个更好的方法,完全利用相同的概念),因为您已经知道这是一个更好的RegEx/VBA候选者,我们同意一个更好的方法,但是根据你问题的标准/限制,我们来

由于您说过长度在2到12之间变化,我们可以在12列中创建一组数组公式,
B-M
,它相应地提取1,2,…,12个字符的
RIGHT()
。我们用
将其包装,以返回一个错误
#值用于非数字——注意:输入此公式时,首先选择单元格
B2:M2
,键入公式
=VALUE(右(A2,{1,2,3,4,5,6,7,8,9,10,11,12}))
,然后强制按CTRL+SHIFT+ENTER键

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

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

N.B.由于您指定它的结尾仅为4位数字字符串,因此您可能可以将此方法缩减为前4列;也就是说,不要使用12列,只需使用列
B:E
,然后继续上面的操作。


<>我们通过恳求客户/客户考虑<代码> .xLSM工作簿/VBA/ReGEX或其他解决方案…< /P> < P>单元B1并复制下来:

=--RIGHT(A1,LOOKUP(2,1/(ISNUMBER(--RIGHT(A1,ROW($1:$15)))),ROW($1:$15)))
只需确保
$1:$15中的15将大于任何给定字符串的最大可能结束位数。不需要数组公式条目,也不需要辅助列

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


另一种可能的解决办法:

=AGGREGATE(14,6,--RIGHT(A1,ROW(INDIRECT("1:"&LEN(A1)))),1)
在某些情况下,它可能会给出错误的结果:

aaa12.1
bc1E+13


作为一种解决方法,您可以使用
SUBSTITUTE
将输入字符串中的
E
E
(也可以是
和空格)替换为另一个字母。

文件不能被
xlsm
的原因是什么?这可能有帮助吗@PeterB感谢您的参考…………但我不能在这种情况下使用VBA。还有一个Excel插件的参考:a列中字母数字的最大长度是多少?如果它们足够短,您可以用一些数组公式拼凑出一个解决方案,但它并不漂亮
--
是什么意思?它的意思是“负表达式”。基本上,如果可能的话,它会将文本转换为数字。您可以使用
0+
1*
获得相同的结果。我只是喜欢
--
的样子。哇,这真是太聪明了!谢谢………我将检查我的用户版本的Excel是否支持聚合()
=AGGREGATE(14,6,--RIGHT(A1,ROW(INDIRECT("1:"&LEN(A1)))),1)