打开APP
userphoto
未登录

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

开通VIP
以前学的提取数值的方法,都不如今天的这个好用!

欢迎转发和点一下”再看“,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路



小伙伴们好,今天来和大家分享一道文本题目,从一串文本字符串中提取所需的数字出来。题目相对还是有一点难度,你只要掌握了今天分享的窍门,就能够轻而易举地解决类似的问题了。

题目是这样的:



从左侧的源数据中将数值提取出来,要求就是这些。

大家肯定都知道,LOOKUP函数、SUBSTITUTE函数等等都可以完成提取数值的任务的,但同时他们对源数据的结构上都或多或少有些要求。今天要介绍的这两种方法抛开了我们之前学习过的所有函数和方法,以全新的角度来解决这个问题。


01



这条公式其实就干了三件事儿:

第一,找到第一个数字的的位置;

第二,确定数值的长度;

第三,提取数值。

A2&1/17

这部分,是一个很神奇的算式。它的结果中就包含了0-9这10个数字。这就是它的运算结果:"华为117730.0588235294117647",大家可以看一下,结果中包含了所有0-9这10个数字。

FIND(ROW($1:$10)-1,A2&1/17)

接下来,就可以利用FIND函数来查找0-9这10个数字在A2&1/17中的位置了。

MIN(FIND(ROW($1:$10)-1,A2&1/17))

由于FIND函数的特点,它总是找到第一个出现的数据并返回该数据的位置,因此就可以利用MIN函数来提取位置值最小的那个,也就是最左侧的那个数字。这里,MIN函数提取的值是“3”,表示源数据的数值部分是从第3为字符开始的。

到这里,我们已经完成了第一步任务。下面来确定数值部分的长度。

MID(A2,ROW($1:$15),1)

利用MID函数提取源数据中的每一个字符。这里ROW($1:$15)可以随意写,只要足够长,超过源数据的字符长度就可以。

ISERR(-MID(A2,ROW($1:$15),1))

这部分的作用是将提取到的文本字符都变成TRUE,数值型字符都变成FASLE,为后面的计频来做准备。文本字符前面添加个“-”就会变成错误值,而MID函数提取到的文本型数值在添加“-”就会变成数值型数字了。正好可以利用ISERR来做判断。

ISERR(-MID(A2,ROW($1:$15),1))*ROW($1:$15)

判断的结果乘以ROW($1:$15),就返回一个由0和一些数字组成的内存数组。这部分的结果是{1;2;0;0;0;0;0;8;9;10;11;12;13;14;15}。对照单元格A2中的源数据我们可以发现,凡是数字部分对应的位置上都显示为0。这部分为下面的计频做好了准备。

FREQUENCY(ROW($1:$15),ISERR(-MID(A2,ROW($1:$15),1))*ROW($1:$15))

利用FREQUENCY函数对ROW($1:$15)在ISERR()*ROW($1:$15)这部分上计频。计频的结果为{1;1;0;0;0;0;0;6;1;1;1;1;1;1;1;0}。

根据FREQUENCY函数的特点,它会在大于等于查找值中最小的那一个数字的位置上计频,而本例中,在计频的这个位置上的数据其实并不是数值型数字,并不是我们需要的内容。因此上面结果需要再减去1,才是单元格A2中数值部分的长度。

再用MAX取最大值,得到5,就是单元格中数字部分的长度。

=--MID(A2,MIN(FIND(ROW($1:$10)-1,A2&1/17)),MAX(FREQUENCY(ROW($1:$15),ISERR(-MID(A2,ROW($1:$15),1))*ROW($1:$15))-1))

接下来,就可以用MID函数来提取数据了。这个不在赘述了。上面就是这种方法完整的公式。


02

刚才讲的的公式还是有些复杂了。而下面要介绍的这个则非常简洁明了。这条公式巧妙地利用的财务函数--NPV函数。



IFERROR(--MID(A2,ROW($1:$20),1),"")

解题思路还是首先把每个单个字符都提取出来,并将文本字符都转换为空值。这部分的结果是{"";"";1;1;7;7;3;"";"";"";"";"";"";"";"";"";"";"";"";""}

NPV函数是一个财务函数。它计算未来发生的款项在现在的净现值。我们无需去掌握这个函数的财务原理,只需要按照下面它的计算原理来套用公式即可。


NPV(9,IFERROR(--MID(A2,ROW($1:$20),1),""))

IFERROR函数返回的结果中只有“1,1,7,7,3”这五个数字,套用上表中的计算公式,我们可以得到0.11773这样一个结果。此时我们发现,从第三位开始往右,都是我们需要部分。

=--MID(NPV(9,IFERROR(--MID(A2,ROW($1:$20),1),"")),3,9)

最后由MID函数提取并转换为数值型数字就可以了。 

-END- 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从文本中截取的套路
Excel公式技巧100:遍历单元格中的数据
判断字符串中第一个汉字、数字、字母的位置?
说你呢,快给我出来!
Excel中,某一单元格中有一些数值.现在想要找出0-9中未出现的数值
提取汉字,除了快速填充外,这招也很实用,需要速码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服