本次的练习是:从一个由文本和数字组成的文本字符串中,提取出连续最长的数字。如下图1所示,在单元格B2中包含一个由文本和数字组成的字符串,很显然,其最长数字是9367。
图1
如何使用公式获得结果?
解决方案
在单元格C2中输入数组公式:
=MAX(IFERROR(MID(B2,ROW(A1:A50),COLUMN(A1:Z1))*1,""))
结果如下图2所示。
图2
公式解析
在公式中,使用了MID函数,通常,我们使用MID函数如下:
=MID(B2,5,2)
返回单元格B2中从第5个字符开始的2个字符,在图1的示例中,返回“2E”。
公式中共3个部分:单元格引用,起始位置,要提取的字符数。
然而,现在要从单元格B2内的每个起始位置提取多个值!
在上面解决方案的公式中:
ROW(A1:A50)
创建了50个起始位置。
COLUMN(A1:Z1)
对于每个起始位置,依次提取1个、2个、……最多到26个字符。
MID(B2,ROW(A1:A50),COLUMN(A1:Z1))
的结果如下图3所示。
图3
由于我们仅需要纯数字,例如6、62、622,等等。于是,对MID函数获得的数组乘以1,这样,数字文本转换成数字,而其它则为错误,如下图4所示。
图4
IFERROR函数将所有错误值转换为空,这样只剩下数字,如下图5所示。
图5
MAX函数从这些数字中提取最大值,得到结果:
9367
小结
当ROW函数和COLUMN函数一起使用时,会创建一个二维数组。