常用于字符提取的函数是 LEFT 函数、RIGHT 函数和 MID 函数。
LEFT 函数可以从一个字符串的左侧开始提取出指定数量的字符,其语法如下。
例如,已知身份证号码的前 6 位包含了所属地域的信息,要使用公式获取这 6 位代码来进行地域的查询。假定身份证号码“513029195101153313”存储在 A1 单元格内,可以使用以下公式来截取身份证号码的前 6 位。
公式运算结果为字符串“513029”。
如果 LEFT 函数省略第 2 个参数,如 LEFT(A1),则表示截取 A1 单元格左侧的首个字符。
RIGHT 函数的用法与 LEFT 函数相似,RIGHT 函数是从字符串的右侧提取指定数量的字符。例如,以下公式返回 A1 单元格中身份证号码的末 4 位,即“3313”。
如果需要提取的内容位于字符串的中部,则需要使用 MID 函数,其语法如下。
其中的 text 参数指定需要处理的原字符串,start_num 参数指定从左侧第几位字符开始提取,num_chars 参数指定提取字符的个数。
已知身份证号码当中第 7 位开始的 8 位代码代表身份证持有人的出生日期信息,那么使用下面的公式可以提取出 A1 单元格当中身份证号码的生日信息。
公式提取出的字符串为“19510115”。在一些应用场景中,需要提取的字符长度和字符位置并不是固定不变的,这就需要借助其他函数以及函数嵌套来完成提取工作。
例如,图14-1中的A列为产品名称,左侧的汉字表示基材种类,右侧的数字表示规格型号,希望用公式把这些产品名称拆分出基材种类和规格型号,得到 B 列和 C 列的结果。直接使用 LEFT 函数或RIGHT 函数难以奏效,因为无论是基材种类还是规格型号的字数都是不确定的。
可以使用 SEARCHB 函数结合通配符“?”找到第一个数字的位置,通过这个位置就能确定 LEFT 函数或 MID 函数所需要截取的字符位置。要获取 B 列显示的基材种类,也就是左侧的汉字,可以在 B2 单元格中输入以下公式并向下填充。
通过这个公式先找到第一个数字的位置,然后将这个位置减去 1,就能得到左侧汉字的字节数,用这个字节数作为 LEFTB 函数的参数,就能提取到左侧的汉字内容。参照类似的思路,可以在 C2单元格写出如下公式提取右侧规格型号的内容。
这个公式同样先使用 SEARCHB 函数找到第一个数字的位置,在这之后,再使用参数 9 作为MIDB 函数提取字符个数提取出右侧规格型号相应的内容。
LEN 函数也是字符串提取中的常用函数,可以获取字符串的字符数。Excel 中还有一个与之功能相似的 LENB 函数,适用于包含双字节字符的中文系统环境。在中文版 Windows 中,中文和全角字符都是两个字节,而半角英文字符和符号则只有一个字节。LENB 函数可以获取字符串的字节数,如下面公式的运算结果为 4。
而下面公式的运算结果为 5。
利用这个特性,可以通过 LEN 函数和 LENB 函数结合 LEFT 函数、RIGHT 函数、MID 函数来分离字符串中的中文字符和英文(数字)字符。
图 14-2 中的 A 列是一组包含中文姓名和电子邮箱地址的联系信息,希望使用公式将其中的中文姓名和邮箱地址进行分离,分别得到图中 B 列和 C 列的结果,就可以借助 LEN 函数和 LENB 函数来实现。
要分离出其中的中文姓名,就需要知道姓名的字符个数。由于中文的字节数是字符数的 2 倍,而英文数字字符的字节数与字符数一样多,因此可以通过下面的公式得到中文字符的个数。
用整个字符串的字节数减去字符数,就能得到字符串中的双字节字符个数,在此例中就是中文的字符数。结合 RIGHT 函数即可分离出中文姓名。
采用类似思路可以算出英文数字字符的个数,公式如下。
以上公式的作用是用 LEN(A2) 得到的字符数减去 LENB(A2)-LEN(A2) 得到的中文字符个数。结合 LEFT 函数即可分离出左侧电子邮箱地址,在 C2 单元格中输入以下公式,并向下填充到C2 : C5 单元格区域。
结合四则运算规则对公式进行简化:
以上公式都利用了中文是双字节字符的特性。类似地,能够在字节单位上进行处理的函数还包括 LEFTB 函数、RIGHTB 函数、REPLACEB 函数、FINDB 函数以及 SEARCHB 函数。但必须注意,包括 LENB 函数在内,以上这些可以识别字节的函数都只在拥有双字节文字字库的操作系统中才能有效工作(例如中文系统和日文系统),而在英文操作系统中,这些函数均有失效的风险。因此,在使用这类技巧之前,建议先使用 LENB 函数进行测试。