用于文本截取的函数有3个,LEFT、RIGHT、MID,可以从指定位置截取指定数量的字符;还有基于截取字节的LEFTB、RIGHTB、MIDB,不常用,也很简单。
LEFT函数语法:=LEFT(字符, [提取字符数]),从文本字符串的第一个字符开始返回指定个数的字符。
RIGHT函数与LEFT函数语法相同,根据所指定的字符数返回文本字符串中最后一个或多个字符。
MID函数语法:=MID(字符, 开始字符数, 提取字符数),返回文本字符串中从指定位置开始的特定数目的字符,该数目由用户指定。
需要注意的是以上函数中提取字符数必须是>0的整数,如果提取字符数大于字符长度,则返回从所有字符;MID函数的开始字符数,包含开始提取的第一字符本身,且必须是>0的整数,如果大于字符长度,则返回空。
接下来看一下几个函数的用法:
在D4单元格中输入,=LEFT(C4,2),双击填充,公式从左则提取2个字符。
在E4单元格中输入,=LEFTB(C4,2),双击填充,公式从左则提取2个字节。
在F4单元格中输入,=RIGTH(C4,2),双击填充,公式从右则提取2个字符。
在D4单元格中输入,= RIGTHB(C4,2),双击填充,公式从右则提取2个字节。
可以看得出来,汉字、英文、数字一个字是1个字符。汉字一个字是2个字节、英文、数字一个字是1个字节。关于字符与字节的区别,可以在网络上自行查询学习。
再来看一下MID的用法。
在H4单元格中输入,=MID(C4,5,2),双击填充,公式从第5个(含第5个)字符开始提取2个字符。
在I4单元格中输入,=MIDB(C4,5,2),双击填充,公式从第5个(含第5个)字节开始提取2个字节。
3个函数一般会配合其它函数综合应用,比如配合FIND、SEARCH函数,后面会讲解。
看2个使用文本提取函数有关的综合案例
案例1:提取身份证号码中的出生年月日
分析下,身份证号码中第7-14位是出生年月日,共8位,是固定的。
在D10单元格中输入,=MID(C10,7,8),从第7位开始,提取8位,就得到了年月日。如果想让数字更易读,可以使用TEXT函数进行格式化,比如=TEXT(MID(C10,7,8),"0000年00月00日")。
案例2:提取文本中的数字。从简单的来,前提是确定数字的位置,但数字有多少个不确定。
先分析下,位置固定,根据情况使用LEFT或RIGTH,案例中使用RIGTH。
接下来需要确定提取多少个字符,可以使用字符与字节区别的特性,汉字一个字是1个字符或2个字节,数字一个字是1个字符也是1个字节,可以使用LEN函数与LENB函数,找出字符与字节的差异数量就是数字的字符数。看公式
在D13单元格中输入,=RIGHT(C13,LEN(C13)*2-LENB(C13)),就可以得到文本中的数字。
加大一点难度,数字在文本中位置不确定、数字有多少个也不确定。
分析下:在文本中,需要使用MID函数。数字多少个,使用上个案例中的方法;位置不确定,可以使用ROW函数生成一个动态数组,从1开始,到一个足够大的值作为开始字符数,这里使用30,足够了。这样就从第1到第30个字符开始截取,会提到一个数组,其中只有一个是包含完整数字的。MID提取的数字是文本类型,可以使用文本转数值的函数或其它技巧转成数值,然后再使用LOOKUP函数提取近似值。
先在D14单元格中输入,=MID(C14,ROW(1:30),LEN(C14)*2-LENB(C14)),得到一个数组。然后使用添加”--"号或 0的方式,把文本型的数字转成数值型数字,如果不是数字就得返回一个错误值。这是一个很好用技巧,在写公式的过程中要充分利用这个特性。
接下来在外面写LOOKUP函数, LOOKUP的模糊匹配特性会返回接近这个值的数字。最后的公式是:=LOOKUP(9^9,--MID(C14,ROW(1:30),LEN(C14)*2-LENB(C14))。