打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
这个提取单元格数字的公式很强悍,看懂这个思路你就厉害了!

偶然在群里看到一个关于数字提取的问题,大家一起来看看吧:

这是一个典型的不规则数据,文本和数字混合(还有符号),数字还有小数。如果非要说有规律的话,就是每个单元格只有一个数值,并且是正数。

例子中的公式为:

=MAX(--TEXT(MID(A2,ROW($1:$10),COLUMN(A:H)),"0.00;;0;!0"))

当然这个公式不是唯一的解法,还有一些其他的公式可以实现,我们今天的主要目的也不是一题多解,研究提取数字的问题。而是想借这个例子,来分析里面涉及到的知识点,下面我们一起来分析一下这个公式:

首先,这是一个数组公式,必须按三键完成输入(有关数组公式的基本知识文末会有推荐阅读的文章,请根据自己的情况选择阅读)。

其次,这个公式里用到了五个函数:max,text,mid,row和column。

这四个函数之前的文章都有介绍,基本的用法都不是很难:

max是返回一组数字的最大值;

text是按照指定的格式显示数据;

mid是根据指定位置提取字符串的内容;

row得到行号;

column得到列号。

可是当一些基础的函数组合起来以后,往往就变得难以理解,这是今天的主要内容。

最后,对于较为复杂的公式,通常都是从最里层的函数开始分析,本例中最外层的函数是max,text在第二层,mid在第三层,row和column共同作为mid函数的参数,也就是最内层函数。这是我们分析的顺序,再就是要借助f9功能键,对于计算过程进行解读,了解每一个函数实现了什么样的效果。


下面进入正题,来解读这个公式:

先看这部分:MID(A2,ROW($1:$10),COLUMN(A:H))

mid函数的基本含义是:mid(字符串,开始截取的位置,截取长度)

例子中开始截取的位置用到了row,截取长度用到了column;

ROW($1:$10)的结果是1到10的一个数组(10个数字),也就是说将一个字符串截取了10次,从第1个字到第10个字开始进行截取,为了便于理解,我们看看=MID(A2,ROW($1:$10),1)这个公式可以得到什么内容:

记得是按三键(Ctrl、shift、enter),表面上只能看到一个字,实际上应该是10个字,我们按f9看看:

看到了吗?将单元格的内容分解成了一个一个的字符,从第一个字开始提取一个字符、从第二个字开始提取一个字符……

与之类似,我们再看看

=MID(A2,1,COLUMN(A:H))可以得到什么内容,这次我是直接按了f9显示的:

这次结果变了,提取的位置固定,都是从第一个字开始,但是长度增加了。

对比两个公式的结果,有个细节,使用row得到数据是用分号分隔的,而使用了column得到数据是用逗号分隔的。在数组的计算规则里,分号和逗号是不同方向的数组(好比行是纵向,列是横向),单独存在的时候,看不出区别,但是发生计算的时候,就会有区别了。

现在我们来看看MID(A2,ROW($1:$10),COLUMN(A:H)这部分的结果吧:

这部分看起来是不是非常晕的感觉,其实数据还是非常规则的,注意第一个分号之前的内容,都是从第一个字开始,长度递增提取的结果,然后就是从第二个字开始提取,长度递增提取的结果……

这样做的目的就是把单元格里内容彻底拆分进行重新组合,把所有的组合都列出来了,在这些新组合的字符串里,就有我们需要的数字:

好了,说了这么半天,MID(A2,ROW($1:$10),COLUMN(A:H))这部分不知道你看明白没有,在这部分里面我们需要注意两点:

ROW($1:$10)这里面的10,需要根据单元格的字符长度来调整,如果最长的内容是20个字,这里的10就要改成20,为了保险起见,我们可以稍微写大一点,但是不要太大,因为会影响计算速度。

COLUMN(A:H)这里用的列号,看起来不如数字那么明显,能不能也用row呢?

试试看:

公式这样写好像也能得到结果,那么我们f9看看到底都是些什么数据:

少了很多啊,这是因为两个数组都是row,方向一致,无法得到完整的组合结果(不同方向数组计算原理可以想想九九乘法表,行列相乘得到一个区域,如果同行或是同列相乘的话,得到的也是一行或者一列数据)。

所以这里的column是不能用row替换的,明白了吧。

回到我们的问题,COLUMN(A:H)得到的是1到8的数组,在mid函数中的作用是提取内容的长度,所以如果a列数据中有长度超过8位的数字,这里就要修改,在本例中不会有太长的数字,所以a:h足够了。

啰嗦了这么多,总算是把mid这部分理清楚了,就是对数据源的内容进行重新组合,得到一些新的数据,有带汉字的,也有纯数字的,还有空的,接下来就是text函数出手的时候了,将这些新组合的数据进行统一,为了便于阅读,我将公式TEXT(MID(A2,ROW($1:$10),COLUMN(A:H)),"0.00;;0;!0")中的mid部分用“一组数据”代替,看起来也简单了很多:TEXT(一组数据,"0.00;;0;!0")。

在text里,重点是第二参数"0.00;;0;!0"的含义,在text里,第二参数决定了内容的显示方式,而用分号进行分段是非常重要的一种用法。

通常用三个分号把数据分成四类,“正数;负数;0;文本”,而对每类数据单独指定格式,对照来看,"0.00;;0;!0"这里的四个格式分别是:“0.00”、“”、“0”、和“!0"。怎么理解呢?

如果第一参数是正数,就按保留两位小数来显示;如果是负数,就不显示;如果是0,原样显示为0;如果是文本,则强制显示为0,"!"在这里是强制显示的意思。

因为本例中不会出现负数,所以这里的第二段实际上没有起作用。如果以上解释理解的话,我们再来看看之前用mid得到的那一堆数据,经过了text统一处理后变成了什么样的:

这段公式我们按f9看看结果:

可以看到,所有的字符串都变成了数字,只不过这些数字都是加了引号的,不是真正的数值,而是一些文本格式的数字,如果就这样用max去取最大值的话,是无法得到正确结果的,所以在text前面加了两个-,这是强行对文本数值进行计算从而实现了将文本数值转为真正数值的目的。一个符号是负数,再一个负号是减法运算,真正实现计算的是减法运算,通常这种用法叫做”负负得正“,也可以用1*text,或者0+text都行,总之是用加减乘除这几个运算来实现转换。

到这里,这个公式的分析就接近了尾声,max里面是通过了层层运算得到的一组数值(现在是真正的数值哦)

注意,数字都没有引号了。

max自然就得到了最大的一个数,而这个数也就是我们需要提取的数据了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel公式练习86:找出字符串中最大的数字
Excel 佛山小老鼠说Excel函数
随心所欲,函数大神写的一个公式,可以任意指定一些数字求和,赶紧收藏吧!
EXCEL作文排版
财务人员必懂得几个Excel函数(一)
EXCEL中如何使用VLOOKUP函数提取单元格字符串中的数值
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服