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)