查找文本字符串中的最后一个数字

时间:2014-02-27 11:05:54

标签: excel

我想在文本字符串中找到最后一个数字字符的位置。我正在使用这个公式:

  

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))

但是,如果字符串包含重复数字,则不起作用。

例如,当字符串为“10ABC2010ABC”时,它将返回6而不是9。 当字符串为“10ABC2131ABN”时,它确实返回8而不是9.

任何想法发生了什么?

3 个答案:

答案 0 :(得分:6)

这是工作公式:

=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)}
  • 使用此数组,我们可以在A1单元格中使用每个字符:MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)
  • 使用VALUE(...)我们尝试将每个字符转换为数字。对于所有字符1,2,3,4,5,6,7,8,9,0
  • ,它返回#VALUE!错误
  • 使用ISNUMBER(...)我们会检查VALUE(..)是否返回数字或错误,如果它返回数字,我们会记住它的位置。
  • 最后一步 - 使用Max(..)我们找到数字字符的最后位置

答案 1 :(得分:3)

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部分每次都会沿字符串进一步开始搜索。如果A1中没有数字,则结果为零(如果需要,可能会出现错误)

如果使用Excel 2010或更高版本,另一种可能性是使用AGGREGATE函数:[untested]

=AGGREGATE(14,6,FIND({1,2,3,4,5,6,7,8,9,0},A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

这不需要“数组输入”

有关建议公式的示例工作簿,请参阅here

答案 2 :(得分:2)

这个数组公式也可以工作......好吧,好吧......我知道它使用偏移量:)

=1+LEN(A1)-MATCH(1;ISNUMBER(LEFT(RIGHT(A1;ROW(OFFSET(A1;0;0;LEN(A1);1))))*1)*1;0)