手把手教你,学会字符串提取

您所在的位置:网站首页 如何从字符串中提取字符 手把手教你,学会字符串提取

手把手教你,学会字符串提取

2022-03-26 15:16| 来源: 网络整理| 查看: 265

原标题:手把手教你,学会字符串提取

使用LEFT函数和RIGHT函数提取字符串

LEFT函数和RIGHT函数分别以字符串的左/右侧为起始位置,返回指定数量的字符,两个函数的语法相同。

第一参数text为要提取的字符串或单元格引用,第二参数[num_chars]为可选参数,表示要提取的字符数量,省略时默认提取一个字符,即提取字符串最左端或最右端的一个字符。第一参数为文本字符串时,需要用一对半角双引号将其包含,如图10-51所示。

对于需要区分单双字节的情况,可以使用L EFTB和

RIGHTB函数提取字符串,函数语法如下。

“B”代表byte,与LEFT和RIGHT函数的区别是,前者的第二参数为“字符”的数量,无论字符是单字节还是双字节,均按一个字符计算。而加了“B”的LEFTB和RIGHTB函数,第二参数为“字节”的数量。

汉字为双字节字符,字母或数字为单字节字符。如果第一参数最左端或最右端的字符为单字节字符,在省略第二参数时会返回该字符,否则将返回空格,如图10-52所示。

示例10-18 使用LEFT函数提取地址中的城市名称

图10-53中A列为某地址簿中的部分信息,需要在B列将地址中的城市名提取出来。

在B2单元格中输入以下公式,向下复制到B5单 元格。

=LEFT(A2,FIND("市",A2)-1)公式中LEFT函数的第二参数中嵌套FIND函数,FIND(“市”, A2)返回“市”字在A2单元格中的位置,如A2中为“北京市”,则FIND函数返回3。由于最终提取的结果不需要返回“市”字,因此,FIND函数后再减1。

示例10-19 借助LENB函数提取混合内容中的姓名

图10-54中的A列为某公司参与培训人员的姓名及员工号,需要将A列的员工姓名单独提取出来。

本例中的员工姓名字数不等,且姓名后没有可以用 于FIND函数查找的固定字符。通过观察可以发现以下规律:前半部分的员工姓名汉字是双字节字符,而后续的员工号数字是单字节字符。

图10-54 借助LENB函数提取混合内容中的姓名

根据此规律,只要计算出A列单元格中的字符数和字节数之差,就是员工姓名的字符数。再从第一个字符开始,按这个字符数提取,结果即员工的姓名。

在B2单元格中输入以下公式,向下复制到B9单元格。

=LEFT(A2,LENB(A2)-LEN(A2))

其中LENB函数将A2单元格中的每个汉字字节数统计为2,数字字节数统计为1;LEN函数则将所有的字符都按1统计。因此“LENB(A2)-LEN(A2)”返回的结果就是其中汉字的个数。

使用MID函数从单元格任意位置提取字符串

相较于LEFT和RIGHT函数只能从字符串的最左端或最右端开始提取,MID函数在提取字符串的应用中则更为灵活。函数语法如下。

第一参数text为要提取的字符串或单元格引用;第二参数start_num用于指定文本中要提取的第一个字符的位置,即从第几个字符开始提取;第三参数num_chars指定从文本中返回字符的个数。

针对需要按字节数提取的情况,同样可以使用加“B”的MIDB函数。MIDB函数的第二参数和第三参数均指字节数,即从第几个字节开始,提取几个字节。MID和MIDB函数的3个参数均不可省略,如果MIDB函数的第三参数为1,且该位置字符为双字节字符,结果将返回空格,如图10-55所示。

示例10-20 使用MID函数提取字符串中的手机号

图10-56所示的是文字和数字混合的字符串,字符串前后为文本,中间包含的数字是手机号。需要将中间的手机号提取到B列。

在B2单元格中输入以下公式,向下复制到B9单元格。

=MID(A2,FIND("1",A2),11)

本例中提取的手机号都以“1”开头,图10-56 使用MID函数提取字符串中的手机号通过FIND函数找到“1”所在的位置,作为MID函数的第二参数,即返回字符串的起始位置。第三参数为手机号的字符数11。

示例10-21 使用MID函数分列显示答案

图10-57所示的是某次考试选择题部分的答案,需要将B列内容依次提取到C~G列单元格区域。

在C2单元格中输入以下公式,复制到C2:G7单元格区域。

=M ID($B2,COLUMN(A1),1)

公式向右复制时,COLUMN(A1)部分将依次生成递增的自然数序列,作为MID函数的第二参数,即函数提取的起始位置。MID函数在C~G列依次提取B2单元格中的第1~5个字符。

提取身份证信息

我国现行居民身份证号码由18位数字组成,其中第7~14位数字表示出生年月日:7~10位是年,11~12位是月,13~14位是日。第17位是性别标识码,奇数为男,偶数为女。第18位数字是校检码,包括0~9的数字和字母X。使用文本函数可以从身份证号码中提取出身份证持有人的出生日期、性别等信息。

示例10-22 从身份证号中提取出生日期

图10-58为某公司员工信息表的部分内容,需要从B列身份证号中提取出生日期,并且以日期格式存储于C列。

在C2单元格中输入如下公式,向下复制到C9单元格。

=MID(B2 ,7,8)

公式表示从B2单元格中第7位起,一共提取8个字符,得到8位数字的字符串“19790607”,如图10-59所示。

采用分列的方法,将提取到出生日期转换为日期格式,具体操作步骤如下。

步 骤 1

选中C2 :C9单元格区域,按组合键复制。保持C2:C9单元格区域的选中状态并右击,在弹出的快捷菜单中选择【选择性粘贴】→【数值】→【确定】选项。

步 骤 2

选中C2:C9单元格区域,在【数据】选项卡下单击【分列】按钮,在弹出的【文本分列向导 - 第1步,共3步】对话框中单击【下一步】按钮,如图10-60所示。

步 骤 3

在弹出的【文本分列向导 - 第2步,共3步】对话框中单击【下一步】 按钮,在弹出的【文本分列向导 - 第3步,共3步】对话框中的【列数据格式】选项区域中选中【日期】复选框,单击【完成】按钮,即可得到需要的结果,如图10-61所示。

示例10-23 从身份证号码中提取性别信息

图10-62为员工信 息,需要从B列身份证号码中提取出性别信息。

在C2单元格中输入以下公式,向下复制到C9单元格。

=IF(MOD(MID (B2,17,1),2),"男","女")

公式中使用MID函数提取身份证号中的第17位数,结果作为MOD函数的第一参数。

再使用MOD函数计算此数值与2相除得到的余数,得到的结果为1或0,即身份证号第17位为偶数时,MOD函数返回0,为奇数时MOD函数返回1。

最后用IF函数判断,MOD函数结果为1时返回“男”,否则返回“女”。

提取字符串中的数字

日常工作中,经常会遇到一些不规范的数据源需要处理,如果数据量较多,在不便于重新录入的情况下,可使用文本函数进行数据的提取。

示例10-24 提取字符串左侧或右侧的连续数字

图10-63所示的A列中字符串包含位数不等的汉字、字母和数字,连续的数字位于字符串的左侧或右侧,需要将字符串中的数字提取到B列。

1. 提取左侧的数字

在“Sheet1”工作表的B2单元格中输入以下公式,向下复制 到B5单元格。

=-LOOKUP(0,-LEFT(A2,ROW($1:$15)))

公式中使用LEFT函数从A2单元格左侧分别提取长度为1~15的文本字符串,再加上一个负号,将数值部分转换为负数,文字部分转换为错误值。

LOOKUP函数以0作为查找值,在由负数和错误值构成的内存数组中返回最后一个负数。最后对LOOKUP函数的结果加上负号,即得到正数结果。

2. 提取右侧的数字

在“Sheet2”工作表的B2单元格中输入以下公式,向下复制到B4单元格。

=-LOOKUP(0,-RIGHT(A2,ROW($1:$15)))

公式与从左侧取值的原理相同,只是将用LEFT函数从字符串左侧取值,变为用RIGHT函数从字符串右侧取值。

示例10-25 提取字符串中间的数字

图10-64中,A列记录结果既包含花费的数额,同时包含花费项目及单位,需要将花费的数额提取至B列。

在B2单元格中输入以下数组公式,按组合键,向下复制 到B5单元格。

{=-LOOKUP(0,-MID(A2,MATCH(0,0/MID(A2,ROW($1:$99),1),0),ROW($1:$15)))}

“MID(A2,ROW($1:$99),1)”部分分别从A2单元格第1~99位字符开始提取1个字符(此处默认字符数少于99,可根据实际调整),得到由A2单元格中的每一个字符和空文本组成的内存数组。

{买;衣;服;8;0;0;元;"";……;""}

再用0除以这个内存数组,返回由0和错误值构成的新内存数组。

{#VALUE!;#VALUE!;#VALUE!;0;#DIV/0!;#DIV/0!;#VALUE!;……;#VALUE!;}

“MATCH(0,0/MID(A2,ROW($1:$99),1),0)”部分用MATCH函数以0作为查找值,精确定位0在以上内存数组中的位置,返回4。再由MID函数从A2单元格中分别以MATCH函数的返回值4作为起始位置,以ROW($1:$15)作为提取字符长度。

{"8";"80";"800";"800元";……;"800元"}

再加上一个负号,将数值部分转换为负数,文字部分转换为错误值。使用LOOKUP函数,以0作为查找值,返回内存数组中的最后一个负数。最后对LOOKUP函数取负值,即得到正数结果。

使用FIXED函数指定位数舍入数值

在Excel中除了常规的数值舍入函数,使用FIXED函数也可实现按指定小数位数舍入数值的目的,区别是FIXED函数处理的结果为文本型数字。

FIXED函数用于将数字舍入到指定的小数位数,使用小数点和逗号进行格式设置,并返回文本形式的结果。该函数语法为:

第一参数是需要舍入处理的数字或单元格引用。

第二参数可选,是需要保留的小数位数,如果省略则假设其值为2。

第三参数是一个可选逻辑值,如果为TRUE时,则会禁止在返回的文本中包含表示千位分隔符的逗号。

示例10-26 使用FIXED函数将圆面积保留指定小数位

图10-65为某次测量圆板尺寸的部分记录,其中B列是圆板的半径,C列是使用公式计算得到的面积,需要将计算得到的面积保留一位小数。

在D2单元格中输入以下公式,向下复制到D4单元格。

=FIXED(C2,1)

公式中省略 第三参数,如果返回的文本位数大于等于1000,结果将包含表示千位分隔符的逗号。

收款凭证中的数字分列填写

在财务凭证中经常需要对数字进行分列显示,一位数字占用一格,同时还需要在金额前加上人民币符号(¥)。使用Excel制作凭证时,可以利用函数与公式实现金额自动分列。

示例10-27 使用文本函数进行数字分列

图10-66为模拟的收款凭证,其中F列为各商品的合计金额,需要在G~P列利用公式实现金额数值分列显示,且在第一位数字之前添加人民币符号(¥)。

在G5单元格中输入以下公式,将其复制到G5:P9单元格区域。

=IF($F5,LEFT(RIGHT("¥" &$F5/1%,COLUMNS(G:$P))),"")

公式中使用IF函数进行判断,如果F5单元格不为0,则返回LEFT函数提取的结果,否则返回空文本。

LEFT函数中仅有RIGHT函数一个参数,表示从RIGHT函数返回的结果中取值,且只取一个字符(第二参数省略,表示取左侧第一个字符)。

“$F5/1%”部分表示将F5单元格的数值放大100倍,转换为整数,也可以用“$F5*100”来代替。因为分列显示的金额中没有小数点,使用文本函数要对所有的数字包括“角”和“分”一起进行提取,再将字符串“ ¥”(注意人民币符号前有一个空格)与其连接,变成新的字符串“ ¥13600000”。

使用RIGHT函数在这个字符串的右侧开始取值,长度分别为“COLUMNS(G:$P)”部分的计算结果。“COLUMNS(G:$P)”用于计算从公式当前列至P列的列数,计算结果为10。

在公式向右复制时,COLUMNS函数形成一个递减的自然数序列。每向右一列,RIGHT函数的取值长度减少1,即G5单元格中公式RIGHT函数取值长度为“COLUMNS(G:$P)”,结果为10位,H5单元格为“COLUMNS(H:$P)”,结果为9位。

如果RIGHT函数指定要截取的字符数超过字符串总长度,结果仍为原字符串。“RIGHT(" ¥13600000", 10)”的结果为“ ¥13600000”,最后使用LEFT函数取得首字符,结果为空格。

人民币符号(¥)之前加空格是为了保证当截取字符数超过字符串总长度时,RIGHT截取到的结果最左侧的字符为空格,这样所有未涉及金额的部分都将显示为空白。

---------------------------------------------------------------------

推荐图书

北京大学出版社

《 Excel 2016函数与公式大全》

1. 专家云集:多位身处各行各业,并身怀绝技的微软全球有价值专家与您无私分享。多年对 Excel的研究结果进行揭秘。

2. 知识点全覆盖:详尽而又系统地介绍了 Excel 2016函数与公式的所有技术特点和应用方法,全面覆盖相关知识点,完备知识体系无人能及。

3. 解决实际问题:大量源自实际工作的典型案例,通过细致地讲解,生动地展示各种应用技巧,快速提高读者的办公效率,让读者提前完成手头工作,不用加班。

4. 专业级深度剖析:对常常困扰学习者的功能性特性进行深入剖析,可以让读者既能知其然,又能知其所以然。返回搜狐,查看更多

责任编辑:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3