excel将所有数字提取到单个单元格
前三篇文章分别解了提取位于字符串开头和末尾的数字的公式技术、提取字符串中所有的数字并放在不同的单元格中的公式技术,本文研究从字符串中提取所有数字并将这些数字作为单个数字放置在单个单元格中的技术。
本文使用与上一篇文中相同的字符串:
81;8.75>@5279@4.=45>A?A;
我们希望公式能够返回:
818755279445
解决方案
相对简洁的数组公式:
=NPV(-0.9,IFERROR(MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”& LEN(A1))),1)/10,””))
原理解析
现在,我们应该很熟悉ROW/INDIRECT函数组合了:
ROW(INDIRECT(“1:” & LEN(A1)))
生成由1至单元格A1中的字符串长度数组成的数组,本例中A1里的字符串长度为24,因此得到:
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24}
由1+LEN(A1)=25减去该数组,即:
25-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24}
得到:
{24;23;22;21;20;19;18;17;16;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1}
即公式中MID函数的参数start_num的值,这样:
MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”&LEN(A1))),1)
转换为:
MID(“81;8.75>@5279@4.=45>A?A;”,{24;23;22;21;20;19;18;17;16;15;14;13;12;11;10;9;8;7;6;5;4;3;2;1},1)
得到:
{“;”;”A”;”?”;”A”;”>”;”5″;”4″;”=”;”.”;”4″;”@”;”9″;”7″;”2″;”5″;”@”;”>”;”5″;”7″;”.”;”8″;”;”;”1″;”8″}
再由10除这个数组,得到:
{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0.5;0.4;#VALUE!;#VALUE!;0.4;#VALUE!;0.9;0.7;0.2;0.5;#VALUE!;#VALUE!;0.5;0.7;#VALUE!;0.8;#VALUE!;0.1;0.8}
传递给IFERROR函数,得到:
{“”;””;””;””;””;0.5;0.4;””;””;0.4;””;0.9;0.7;0.2;0.5;””;””;0.5;0.7;””;0.8;””;0.1;0.8}
继续之前,我们先看看NPV函数。
NPV函数具有一个好特性,可以忽略传递给它的数据区域中的空格,仅按从左至右的顺序操作数据区域内的数值。
NPV函数的语法为:
NPV(rate,value1,value2,value3,,,)
等价于计算下列数的和:
=value1/(1+rate)^1+value2/(1+rate)^2+value3/(1+rate)^3+…
为了生成想要的结果,需将数组中的元素乘以连续的10的幂,然后将结果相加,可以看到,如果为参数rate选择合适的值,此公式将为会提供精确的结果。因此,选择-0.9,不仅因为1-0.9显然是0.1,而且从指数1开始采用0.1的连续幂时,得到:
0.1
0.01
0.001
0.0001
…
相应地得到:
10
100
1000
10000
…
因此,在示例中,生成的数组的第一个非空元素是0.5,将乘以10;第二个元素0.4乘以100,第三个元素0.4乘以1000,依此类推。
这样,公式:
=NPV(-0.9,IFERROR(MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”& LEN(A1))),1)/10,””))
转换成:
=NPV(-0.9,{“”;””;””;””;””;0.5;0.4;””;””;0.4;””;0.9;0.7;0.2;0.5;””;””;0.5;0.7;””;0.8;””;0.1;0.8})
得到:
818755279445
注意,应对单元格进行格式设置,否则可能结果是货币形式或者指数形式。也可以在公式中添加一个INT函数来确保输出的是整数:
=INT(NPV(-0.9,IFERROR(MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”&LEN(A1))),1)/10,””)))
其实,还有更复杂的公式可以实现,例如数组公式:
=SUM(MID(A1,LARGE(IF(ISNUMBER(0+MID(A1,Arry1,1)),Arry1),ROW(INDIRECT(“1:”&COUNT(0+MID(A1,Arry1,1))))),1)*10^(ROW(INDIRECT(“1:”&COUNT(0+MID(A1,Arry1,1))))-1))
公式中的Arry1是定义的名称:
=ROW(INDIRECT(“1:”&LEN($A1)))
一对比,就会感叹这样巧妙的公式应用了,只能说佩服!
最新推荐
-
怎样取消wps网盘在我的电脑中显示 关闭wps网盘显示
怎样取消wps网盘在我的电脑中显示?很多用户在下载安装wps办公软件后,发现我的电脑里多了一个wps网盘的 […]
-
手机剪映怎么添加第二个视频轨道 剪映增加视频轨道
手机剪映怎么添加第二个视频轨道?在手机剪映中,用户可以通过添加多条视频轨道来进行画中画效果,对要剪辑的视频 […]
-
华为手机纯净模式在哪里关闭 取消纯净模式华为
华为手机纯净模式在哪里关闭?华为手机默认的纯净模式是一种安全防护功能,可以保护用户的安全和数据隐私安全。在 […]
-
wps字的右上角的[1]怎么打 word文档右上角标注
本文主要介绍:很多小伙伴平时会通过WPS进行办公,比如对于一些相关的文档资料的整理的情况,那么就可以在WPS中的Word文字文档中进行操作,一些小伙伴想要知道怎么在文字旁边添加一个[1]的上标符号,想
-
win10怎么开启手写模式 win10怎么调出手写键盘功能
现在的win10系统是支持用户们连接手写板进行使用,在设备连接之后,还是需要将电脑中的功能启动才能够正常运行,很多小伙伴不知道应该如何设置开启手写面板的功能,针对这个问题,下面来为广大用户们进行解答,一起来看看详细的操作步骤吧。
-
手机剪映怎么删除多余视频片段 剪映怎么删掉部分视频
手机剪映怎么删除多余视频片段?手机剪映是一款强大的视频剪辑工具,它可以对用户们所拍摄的视频进行编辑,比如常 […]
热门文章
怎样取消wps网盘在我的电脑中显示 关闭wps网盘显示
2手机剪映怎么添加第二个视频轨道 剪映增加视频轨道
3华为手机纯净模式在哪里关闭 取消纯净模式华为
4wps字的右上角的[1]怎么打 word文档右上角标注
5win10怎么开启手写模式 win10怎么调出手写键盘功能
6手机剪映怎么删除多余视频片段 剪映怎么删掉部分视频
7win10如何把电脑改为无密码 win10取消开机账户登录的步骤
8win10访问共享文件要求输入网络凭据 访问共享电脑需要输入网络凭据怎么办
9手机剪映如何只导出音频mp3 剪映导出音频mp3
10edge怎么导入其他浏览器数据 edge浏览器导入chrome浏览器数据
随机推荐
专题工具排名 更多+