从含有数字的文本字符串中提取出数字

我的工作表中有许多含有数字的单元格,我想将数字单独提取出来。如下图1所示,将列A的单元格中的数字提取出来放置在列B中,应该如何编写公式呢?

图1

可以使用数组公式:

=1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$20),1)),0),COUNT(1*MID(A1,ROW($1:$20),1)))

如下图2所示,下拉至单元格B4。

图2

公式中,使用MID(A1,ROW($1:$20),1)分解单元格A1中的文本,使用MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$20),1)),0)找到文本中数字的起始位置,使用COUNT(1*MID(A1,ROW($1:$20),1))来计算数字的个数。

然后,将数字的起始位置及个数作为MID函数的参数,提取出数字文本。最后,乘以1将文本转换成数字值。

编写公式的过程请参考下面的视频:

此外,可以使用下面的公式:

=LOOKUP(9.99999999E+307,1*LEFT(MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),999),ROW($1:$999)))

实现相同的目的。

明解C语言 中级篇

作者:[日]柴田望洋

当当

上面的示例及公式解决了文本中数字是连续的情形。如果文本中的数字不连续呢?也就是说,文本中有好几处出现了数字呢,如下图3所示,使用上面的公式得到#VALUE!错误,我们如何把这些数字提取出来?

图3

先给出公式:

=SUM(MID(0&A1,LARGE(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)/1)*ROW(INDIRECT("1:"&LEN(A1))),ROW(INDIRECT("1:"& LEN(A1))))+1,1)*10^(ROW(INDIRECT("1:"& LEN(A1)))-1))

仍然是数组公式,结果如下图4所示。

图4

这个公式很复杂,有点不好理解,下面我们来详细解释。

公式中的:

ROW(INDIRECT("1:"&LEN(A1)))

等价于:

ROW(INDIRECT(“1:”&14))

进一步转换为:

ROW(INDIRECT(“1:14”))

使用在数组公式中时会转换为数组:

{1;2;3;4;5;6;7;8;9;10;11;12;13;14}

公式中的:

MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)

等价于:

MID(“完美2018Excel923”,{1;2;3;4;5;6;7;8;9;10;11;12;13;14},1)

得到数组:

{"完";"美";"2";"0";"1";"8";"E";"x";"c";"e";"l";"9";"2";"3"}

公式中的:

ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)/1)

等价于:

ISNUMBER({"完";"美";"2";"0";"1";"8";"E";"x";"c";"e";"l";"9";"2";"3"}/1)

由于数字文本除以数字将转换为数字,其他文本将返回错误,因此上述公式转换为:

ISNUMBER({#VALUE!;#VALUE!;2;0;1;8;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;9;2;3})

得到数组:

{FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}

公式中的:

LARGE(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)/1)*ROW(INDIRECT("1:"&LEN(A1))),ROW(INDIRECT("1:"& LEN(A1))))

等价于:

LARGE({FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE}*{1;2;3;4;5;6;7;8;9;10;11;12;13;14},{1;2;3;4;5;6;7;8;9;10;11;12;13;14})

转换为:

LARGE({0;0;3;4;5;6;0;0;0;0;0;12;13;14},{1;2;3;4;5;6;7;8;9;10;11;12;13;14})

得到数组:

{14;13;12;6;5;4;3;0;0;0;0;0;0;0}

下面,来看公式中的:

MID(0&A1,LARGE(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)/1)*ROW(INDIRECT("1:"&LEN(A1))),ROW(INDIRECT("1:"& LEN(A1))))+1,1)

转换为:

MID(“0完美2018Excel923”,{15;14;13;7;6;5;4;1;1;1;1;1;1;1},1)

等价于:

{"3";"2";"9";"8";"1";"0";"2";"0";"0";"0";"0";"0";"0";"0"}

最后,到了公式的关键部分。

我们知道,x^y表示x的y次方,这意味着:

MID(0&A1,LARGE(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)/1)*ROW(INDIRECT("1:"&LEN(A1))),ROW(INDIRECT("1:"& LEN(A1))))+1,1)*10^(ROW(INDIRECT("1:"& LEN(A1)))-1)

等价于:

{"3";"2";"9";"8";"1";"0";"2";"0";"0";"0";"0";"0";"0";"0"}*10^{0;1;2;3;4;5;6;7;8;9;10;11;12;13}

进一步转换为:

{"3";"2";"9";"8";"1";"0";"2";"0";"0";"0";"0";"0";"0";"0"}*{1;10;100;1000;10000;100000;1000000;10000000;100000000;1000000000;10000000000;100000000000;1000000000000;10000000000000}

得到数组:

{3;20;900;8000;10000;0;2000000;0;0;0;0;0;0;0}

将上述数组传递给SUM函数求和,得到结果:

2018923

也就是文本中的数字连接后的数字。

为什么要使用0&A1呢?这是为了保证在MID函数提取值时,避免由于参数是0而导致产生错误值。

下面,再给出两个公式。

公式2:

=SUM(IFERROR(MID(A1,LARGE(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)^1)*ROW(INDIRECT("1:"&LEN(A1))),ROW(INDIRECT("1:"&LEN(A1)))),1),0)*(1&REPT("0",(ROW(INDIRECT("1:"&LEN(A1)))-1))))

公式3:

=SUMPRODUCT(MID(0&A1,LARGE(INDEX(ISNUMBER(--MID(A1,ROW($1:$50),1))*ROW($1:$50),0),ROW($1:$50))+1,1)*10^ROW($1:$50)/10)

都可以得到相同的结果。

(0)

相关推荐

  • 将数字拆分后求和的方法二三例

    点击上方 蓝色 文字  关注我们吧! 送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! 上周我有一个帖子讲的是如何将一个数字拆分后再将各位数求和.你知道如何计算整 ...

  • 职场的你,会玩数字游戏吗?EXCEL函数帮你数字无忧!

    送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! 每个人都不可避免地要和数字打交道.现实生活中,你对数字的敏感程度,有时候决定了你的成就高度.因此,拥有极好的数字 ...

  • 如何将数字从文本串中提取出来,快来看看这里吧!

    送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! 今天看到这样一个问题:怎样将文本字符串中的所有数字部分提取出来,如下图. 看到这个题目,我立即想到了曾经给大家介 ...

  • Excel字符串中提取数字,不需要大神级公式

    小勤:大海,救命!有个二货给的表里面有一列中英文.数字.标点符号全混在一起的,我要把数字提出来! 大海:呵呵.网上不是有很多大神写过很牛B的公式吗? 小勤:我找过了,找到一个,完全看不懂!而且试了一下 ...

  • 从字符串中提取多个数字

    大家好,我经常看到有些同学会问一些从字符串中提取多个数字的问题,可能是ta数据录入不规范的原因,也可能是从系统导出的数据.不管什么原因,我认为这个问题也挺常见的,所以就学习和研究了好几天,今天就来和大 ...

  • 如何获取含有相同字符的字符串中该字符第n次出现的位置?

    Q:有时候,我们需要获取字符串中某字符第n次出现的位置.例如,在单元格A1中的字符串为"xy-01-02",如何知道字符"-"第2次出现的位置呢?(当然,我们数 ...

  • 从分隔符连接的字符串中提取子字符串

    有时候,在工作表单元格中有一些以某分隔符连接的字符串,如图1中的单元格A1,其内容是以逗号连接城市名. 图1 如果我们想要提取其中的某个城市,例如第8个子字符串表示的城市名,则可以使用下面的公式: = ...

  • Excel技巧|有字母、数字,这样的字符串怎么提取出最大值?

    当我们有一个字串符时,有字母.数字...但是,我们想要找出来这些数字中那个是最大时,我们可以用三种方法找出来谁是最大值. 示例 1. 公式 =MAX(IF(ISNUMBER(--MID(B1,ROW( ...

  • 怎么从一串文本中提取出想要的部分?

    如下图所示,A列是一些包含了很多信息的字符串,现在要将红色字体的品牌部分提取出来,结果如B列所示.如果让你来做,你会如何解决呢? 观察一下,我们就可以发现,数据源很有规律:不同信息之间用分号分隔,内部 ...

  • Excel中从文字中提取电话号码数字的操作方法

    如何通过excel公式从文字中提取电话号码数字,具体该怎么去操作的呢?今天,学习啦小编就教大家在Excel中从文字中提取电话号码数字的操作方法. Excel中从文字中提取电话号码数字的操作步骤如下: ...

  • Excel单元格含有文字+数字+英文,如何提取出数字部分进行计算?

    Excel情报局 Excel职场联盟 生产挖掘分享Excel基础技能 Excel爱好者大本营 用1%的Excel基础搞定99%的职场问题 做一个超级实用的Excel公众号 Excel是门手艺玩转需要勇 ...