添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

「如何从Excel单元格中的文本值提取指定的数据出来?」

就比如做电商的同学可能经常遇到收货地址需要拆分成省市区的问题。

但是用户提交的地址信息不一定规范,就导致拆分的时候需要人工一个一个识别。

本期内容,以溪带你看看工作中常见的文本拆分与提取的案例问题。

如果有你现在正在遇到的问题,可以直接套用。

关注以溪同学,收藏加星,get更多Excel知识技能!

「案例列表」

  1. mid\left\right文本提取函数使用

  2. 地址拆分省市区

  3. 提取指定字符 - 分隔的指定个数字符

  4. 只提取数字或者字母


1. mid\left\right文本提取函数使用

Excel中有专门的文本提取函数,其中mid、left、right分别用于从中间、左侧、右侧提取文本中的指定长度内容。

依次举例说明:

函数参数:

MID(text,start_num,num_chars)

第一个参数是待提取的文本字符串,第二个是开始提取的字符位置数,第三个参数是从文本中提取的字符数

=MID(A2,3,2)

通过上面的3个函数,我们知道,想要拆分提取字符,必须要知道从哪提取,提取多少。

所以,第一步,我们需要知道在地址中,省这个字符的具体位置,以及省字符前面有多少字,就能直接提取出省这个字符串了。

在这里引入两个函数,一个是find,一个是len。

find函数

函数作用就是用于查找指定字符在字符串中的字符数位置,函数最终返回值是一个数字。 FIND(find_text,within_text,start_num)

find(要找哪个字符,在哪个字符串里找,从第几个字符位置开始找)

len函数参数

len函数用于返回指定字符串一个有多少个字符数

LEN(text)

len(文本字符串)

除了查找和统计字符数,Excel也提供findb与lenb函数,函数核心功能与find和len都一样。

唯一的区别就是,带b的函数,代表查找或计数的是字节数,反之是字符数。

其中日语、中文(简体)、中文(繁体)以及朝鲜语一个字符算2个字节数。参考下图理解,find和findb用于查找 同学 位于 以溪123同学 中的位置。

  • 使用find函数找到第一个指定字符 - 的位置数,此时find函数默认从字符串第一个字开始找。

  • 然后接着继续用find函数找指定字符 - ,但是此时,我们find函数的第三个参数就写第一次find函数的结果值+1,也就是从第一个指定字符 - 的下一个字符位置开始查找,由此找到了第二个 - 的位置。

  • 至此mid函数的2、3参数已经完全找到了。

  • 「提取最后一个核销状态公式原理解析」

    1. 使用substitute函数,将所有的指定字符 - 替换为长度和字符串长度一致的空格。替换后图片如下图。

  • 公式使用了字节和字符两种不同的计算方法。使用minb函数提取指定字节数的数据,lenb和len分别统计字节和字符数量。

  • 由于字母数字和符号都是1个字节,中文是2个字符,通过searchb查找任意1个字节在字符串中的出现位置,就能定位字符串中第一个字母数字或者符号出现位置,进而通过midb函数提取。

  • 提取位数则通过len和lenb的计数来计算出来,lenb减去len得到的就是中文字符的数量也就是2,换算就是4个字节,最后用lenb减去中文字符的字节数,就得到字母数字和符号的字节数。

  • 最终使用substitute函数去除指定的符号,就提取完成了。


  • 如果只想提取字母或者数字,则使用下面的公式:

    只提取大小写字母的数组公式,请使用数组三键CTRL+SHIFT+回车确认公式:

    =CONCAT(    IF(        (            (CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=65)*(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=90)            )+(            (CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=97)*(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=122)),        MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)        ,""      )      )

    如果只提取数字,则数组公式如下:

    =CONCAT(    IF(        (CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))>=48)*(CODE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))<=57),      MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)      ,""      )      )

    「从字符串中单独提取字母或数字公式原理解析:」

  • 上面的提取字母和数字,都使用了相同的原理,那就是code函数,对不同字符的对应编码,其中数字0到9,编码为48到57,大写字母A到Z,编码为65到90,小写字母a到z,编码为97到122。

  • 公式是数组公式,使用了mid将字符串拆分成单独的字符,再通过code函数得到编码,与对应编码对比,区分字母和数字,最终通过if函数判断保留字母或数字,使用concat函数将保留的字符拼接在一起。

  • 其中用到了sequence序列函数用法以及filter函数的多条件式判断,建议在以溪主页,查看对应文章,深入了解。


  • 如果用数组公式觉得太麻烦,也可以使用Excel插件来提取字符,如果你会编写正则表达式,那无论是多奇怪的字符,都可以通过插件运行正则表达式提取指定的字符出来。

    插件提取方法路径如下:

    方方格子-高级文本处理-更多