我想在文本字符串中找到最后一个数字字符的位置。我正在使用这个公式:
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.
任何想法发生了什么?
答案 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)