字符串是混合的字母和数字,但字符串末尾总是有一组数字。
应忽略字符串中间的任何前导数字或数字。我提出了:
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。是否有一个公式得到相同的结果?
提前谢谢
答案 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
并继续如上所述。
最后,我们请求客户/客户考虑.xlsm
工作簿/ VBA / RegEx或其他解决方案......
答案 2 :(得分:1)
另一种可能的解决方案:
=AGGREGATE(14,6,--RIGHT(A1,ROW(INDIRECT("1:"&LEN(A1)))),1)
在某些情况下,它可能会给出错误的结果:
aaa12.1
bc1E+13
作为一种变通方法,您可以使用SUBSTITUTE
替换输入字符串中的E
,e
和.
(也可能是,
和空格)