find文本string中的最后一个数字
我想在文本string中find最后一个数字字符的位置,我使用这个公式来实现;
MAX(IF(ISERROR(FIND({1; 2; 3; 4; 5; 6; 7; 8; 9; 0},A1)), “”,FIND({1; 2; 3; 4; 5; 6; 7; 8; 9; 0},A1))
但是,如果string包含重复的数字,则这不起作用。 例如,当string是“10ABC2010ABC”时,将返回7而不是9.当string是“10ABC2131ABN”时,返回8而不是9。
任何想法是怎么回事?
这里是工作公式:
=MAX(IF(ISNUMBER(VALUE(MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1))),ROW(INDIRECT("1:" & LEN(A1)))))
按CTRL + SHIFT + ENTER来评估它。
说明:
-
ROW(INDIRECT("1:" & LEN(A1)))
返回数组{1,2,3,...,Len(A1)}
-
MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)
- 使用
VALUE(...)
我们试图将每个字符转换为数字。 它返回#VALUE!
错误为所有字符exept 1,2,3,4,5,6,7,8,9,0 - 使用
ISNUMBER(...)
我们检查VALUE(..)
是否返回数字或错误,如果返回数字,我们记得它的位置。 - 最后一步 – 使用
Max(..)
我们find数字字符的最后位置
FIND
只find每个号码的第一个实例的位置,所以它不会适合您的要求。 尝试使用这个公式
=MAX(IFERROR(FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),0))
用CTRL + SHIFT + ENTER确认
这也使用FIND
但是ROW(INDIRECT
部分每次都会沿着string进一步search,如果在A1中没有数字,结果为0(如果你愿意的话,你可以做出错误)
如果您使用Excel 2010或更高版本,另一种可能是使用AGGREGATE函数,如下所示:[未经testing]
=AGGREGATE(14,6,FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),1)
这不需要“数组input”
有关build议的公式,请参阅此处的示例工作簿
而这个数组的公式也将工作…好吧,好的…我知道它使用偏移量:)
=1+LEN(A1)-MATCH(1;ISNUMBER(LEFT(RIGHT(A1;ROW(OFFSET(A1;0;0;LEN(A1);1))))*1)*1;0)