Excel 中如何提取数字

发布于 2021-01-16  832 次阅读


原文地址

有读者留言希望能够整理一期内容,讲解从数字、汉字中提取汉字或者数字的方法,本文将对比较常见的几类提取情况进行讲解。使用公式提取单元格内的数字,要根据具体的数据结构找到某种规律从而设计出对应的公式。当然也有所谓的万能提取公式,不过非常复杂并且计算量大,因此只在文末简单说明。

第一类情况:数字在左侧

  • 例一:数字在左侧,且数字位数固定。

pic_001.png
在这个例子中,数据非常有规律,数字都在左边的三位,要想将学号单独提取出来,只需要使用 left 函数即可:=LEFT(A2,3)

pic_002.jpg

公式也非常简单,第一个参数是要提取数字的单元格,第二个参数是要提取几位(从左边算起)。对于例一的这一类数据,使用的时候根据数字的长度修改第二参数即可。

  • 例二:数字在左侧,数字位数不固定,但是有明显的分隔符号。

如果数字长度不是固定的三位,使用之前的方法就不行了,如下图。这时就需要找到数据源的规律,再利用规律进行操作。当前的数据统一存在一个 "-" 号,可以根据 "-" 号的位置来确定数字的长度,再用 left 提取。

pic_003.jpg

对于这种情况需要用到另一个函数来帮忙,那就是 find 函数。

利用公式 = FIND("-",A2,1) 可以确定 "-" 的位置。

pic_004.jpg

find 函数有三个参数,第一个参数是要找什么内容,第二个参数是从哪里找,第三个参数是从第几个字开始找(从左边算起)。

=FIND("-",A2,1) 意思是在 A2 单元格找 “-”,从开始位置找(左边第一位)。公式的结果是数字,代表“-” 在单元格的位置(第几个字符),此时我们需要提取的数字长度就是 find 的结果减 1,因此方法就有了:=LEFT(A2,FIND("-",A2,1)-1)

pic_005.jpg

这个方法的适用范围也比较广泛,只要可以发现比较明显的分隔符号(可以是符号,汉字,字母等等内容),都可以使用这个方法。

  • 例三:数字在左边,位数不固定并且没有明显的分隔符号。

pic_006.jpg

如果数据是这种情况,那么前面的方法都不能用了,数字长度不确定,也没分隔符号,唯一的规律就是数据里只有数字和汉字(没有字母以及其他符号)。

在 Excel 中,字符的长度有两种,半角字符(数字,字母以及英文方式下输入的符号)长度为 1,而全角字符(汉字和中文符号等)长度为 2。可以通过一个实例来了解这一点:

pic_007.jpg

len 函数是一个专门计算单元格内容长度的函数,不区分全角半角,其长度与我们平时理解的一致,相当于字符的 “个数”。下面再来看看区分全角和半角的情况:

pic_008.jpg

lenb 函数的作用于 len 函数一致,区别就是计算内容的长度时会区分半角全角,从结果可以看出明显的差异。其中文字按全角计算的长度是不区分全半角的 2 倍,而数字、字母在两种情况下则完全一致。

对于例三的情况,就需要使用 len 与 lenb 来确定数字的长度,再用 left 提取。

利用公式 = LEN(A2)*2-LENB(A2) 可以确定数字的长度,如下图所示。

pic_009.jpg

为什么 len*2-lenb 就会得到数字的长度呢?

根据前面两种情况下的对比结果,lenb 统计长度,文字长度是 len 统计值的两倍,而数字长度与 len 统计值一致,所以公式 len*2-lenb 就可以计算出数字的长度了。

数字的长度统计出来以后,解决方法显而易见:=LEFT(A2,LEN(A2)*2-LENB(A2))

pic_010.jpg
例三这种情况同样比较典型,只要记住是 len*2-lenb 就可以了,如果确实记不住,那么遇到问题的时候可以单独算一算,先把数字的长度算出来,再组合 left 就行了。

  • 例四:数字在左边,并且含有字母等半角字符。

pic_011.jpg

这种情况很复杂,唯一的规律就是数字在左边。来看看如何解决吧。

可以利用公式:=-LOOKUP(1,-LEFT(A2,ROW($1:$9)))。

pic_012.jpg

关于这个公式,要解释的话估计还得五千字,所以各位只需要记得套路即可,唯一有可能修改的就是最后面那个 9,当最长的数字超过 9 位时,就要修改这个 9,可以直接用 99 来完成。

最后,这个公式适用于任何数字在左边的情况

第二类情况:数字在右边

数字在右边的情况与数字在左边非常类似,以下仅做简单说明:

数字位数固定的直接用 right 提取;

pic_013.jpg

数字位数不固定但有分隔符号的使用 find 函数配合 mid 函数 完成提取:=MID(A2,FIND("-",A2,1)+1,9)

pic_014.jpg

注:公式中最后一个参数值 “9” 需要根据数字的最大位数修改,譬如提取的数字最大位数是 10,则需要写成 10 或者大于 10 的数字。)

数字位数不固定同时没有分隔符的还是可以使用 len 和 lenb 的组合:=RIGHT(A2,LEN(A2)*2-LENB(A2))

pic_015.jpg

什么规律都没有的继续让 lookup 发大招:=-LOOKUP(1,-RIGHT(A2,ROW($1:$9)))

pic_016.jpg

第三类情况:数字在中间

数字在中间这种非常特殊,比较规范的数据源中一般不会出现这样的情况,举一个例子吧:

pic_017.jpg

例如图中这种数据,如果数字前面或者后面的长度固定,可以先用函数将内容变成前面讨论过的情况再去处理:

pic_018.jpg

公式比较简单,不做解释了,至于后面一步怎么做,根据前面的学习你已经会了吧?

下面要说的这个方法就是一种比较通用的方法了,有人称其为万能提取公式:

=-LOOKUP(0,-MID(A1,MIN(FIND(ROW($1:$10)-1,A1&1/17)),ROW($1:$9)))

pic_019.jpg

数组公式,需要按三键 “Ctrl+shift + 回车” 结束。

小结

关于如何使用公式提取单元格内的数字,以上将绝大多数情况都进行了说明,当然不是全部,例如含有小数的情况,因为有了小数点,就更加特殊了。

最后的那个数组公式可以算是一个比较通用的公式了。需要强调的是:大部分的问题之所以变得非常麻烦,就是因为不规范的数据源导致的,因此养成好的习惯,一个单元格只存放一种属性的数据,例如把名称与数量、价格等信息分开存放,这样就会大大地提高统计效率。

当然站在提高公式运用能力的角度来说,数字提取这一类问题也是函数练习的好题目。希望大家能够结合以前学过的函数,思考出更多的公式来实现数字的提取。


或许明日太阳西下倦鸟已归时