Question to say "I can!"

excel提取单元格中的数字

2014-02-26

excel单元格中经常是数字和字符混在一起,那么当我们需要从单元格中提取数字时,该用什么样的方法呢?下面兰色幻想就这个问题做一个总结,希望能给大家所有启发和帮助。

1、数字在前。

如果字符串中数字在前,如A1单元格中字符为 56ABC,我们可以用下面的公式来提取。

=LOOKUP(9^9,--LEFT(C6,ROW(1:9)))

估计很多没基础的看不懂上面的公式,9^9是什么?后面row又是什么用法?这里简单介绍一下吧。lookup函数可以查找到一组数中最后一个数字,那么我们就用left进行截取前1个,前2个,前3个..前9个,怎么实现这个,就是把left第二个参数设置成一个数组。row函数可以生成一个数字序列来完成这个任务。

2、数字在后

如果数字就不能用上面的方法了。我们可以查找最前的数字位置然后用MID函数提取。

=MID(C5,MIN(FIND(ROW(1:10)-1,C5&"0123456789")),9)

公式说明:使用find查找第一个数字的位置,row生成0~9的数字,后面之所以加上0~9,因为如果字符串中没有某个数字,查找返回错误值,从而会让整个公式产生错误。

3. 数字在中间

数字在中间是最难提取的,不能再用简单的截取就能实现了。那怎么办呢?我们可综合一下两种方法。

=LOOKUP(9^9,--LEFT(MID(C7,MIN(FIND(ROW(1:10)-1,C7&"0123456789")),10),ROW(1:9)))

当然,我们还可以用第二种方法的思路,求第一个数字,再计算第二个数字,然后再倒减出总的位数。那样公式会比这个公式要复杂很多。

 

附:提取单元格A1中的中文:

数组公式
=MID(A1,MIN(IF(LENB(LEFT(A1,ROW(INDIRECT("1:"&LEN(A1)))))>LEN(LEFT(A1,ROW(INDIRECT("1:"&LEN(A1))))),ROW(INDIRECT("1:"&LEN(A1))),LEN(A1)+1)),LENB(A1)-LEN(A1))


作者:admin | Categories:软件使用 | Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

无觅相关文章插件,快速提升流量