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)