在这里,文本有多重含义。我们常说的中文汉字、英文字母等,其中的一个汉字或一个字母就是一个文本字符,那么数字呢?这就涉及另一个问题,即单元格格式,默认的单元格格式是“常规”,Excel会自动识别文本或数字,纯数字内容会识别为数值,默认会右对齐;如果单元格内容包含了非数字内容,则默认为文本,当然,对于特殊格式还会识别为相应的格式,如日期等。请注意,如果单元格格式设置为文本,则其中的数字会作为文本处理,与常规格式或数值相关格式的处理不同的,下面通过一个简单的示例来观察。
在A1单元格输入“3”,将单元格格式设置为文本,可以看到单元格内容会左对象;在A2单元格输入数字2,A3单元格输入数字1,这两个单元格使用默认的常规格式,此时会识别为数字,单元格内容会右对象。接下来对A列数据进行排序,点击选中包含数据的任意一个单元格,然后选择“开始”选项卡>>“编辑”组>>"排序和筛选"按>>“升序”项,可以看到1和2会按数字升序(从小到大)排列,而A1单元格的文本3不会参与排序,如下图。
实际上,A1单元格中只有数字,如果使用SUM(A1:A3)函数计算A1到A3单元格数据的和时,依然可以得到6,即单元格内是纯数字时是可以进行计算的。在单元格中输入内容时,如果需要确保输入的内容作为文本处理,内容可以使用英文单引号开始,如将数字3作为文本,可以输入“'3”,回车后可以看到单元格的左上角有一个绿色的小三角,此时会有提示,遇到这种情况时可以根据实际需要进行处理,如下图所示。
通过以上示例可以看到,在处理文本或数字时,需要同时考虑实际内容和单元格格式等要素。建议实际工作中按列统一设置单元格格式,如果本列数据需要按文本处理就设置为文本格式,如果本列需要按数字处理就设置为数值格式。
Excel中内置了很多文本操作函数,而且在早期的Excel中,很多函数都有两个版本,如LEN()函数用于判断文本的字符数据(无论是英文字符、中文字符或是其它类型的字符),而LENB()函数则基于字节计数,它会返回文本所占的字节数;其中,一个中文字符占用2个字节,如A1单元格有文本"中文和abc",则LEN(A1)返回6,而LENB(A1)返回9。在较新版本的Excel中已声明弃用这些xxxB()函数,在使用时应多测试和观察,确保其能够正常工作,本文接下来的内容不再涉及这些函数。
接下来了解一些常用的文本操作。
TRIM()函数,删除文本中不必要的空白符,如开始部分和结束部分的空白字符,单词之间如果有多个空格只会保留一个,在整理文本内容时非常有用。
对文本中的字母进行大小写转换时可以使用如下函数:
LOWER()函数,将所有字母转换为小写形式。
UPPER()函数,将所有字母转换为大写形式。
PROPER()函数,将所有单词首字母转换为大写形式。
合并文本内容时可以直接使用&运算符。使用&运算符时,运算符两侧的内容都会自动转换为文本形式,然后进行合并。
如果使用Excel 2019以上版本,还可以使用TEXTJOIN()函数组合文本内容,其参数1为分隔内容,参数2指定是否忽略空白内容,忽略设置为TRUE,否则设置为FALSE;参数3开始指定需要组合的内容,如TEXTJOIN(",",TRUE,"A","B","C")返回“A,B,C”。
FIND()和SEARCH()函数的功能都是在在文本中查找指定的内容,并返回查询内容第一次出现的位置,但它们在应用上也有一些不同,如:
假设A1单元格有文本“中文和ABCabc”,则FIND("abc",A1)返回7,FIND("A",A1)返回4;SEARCH("b?",A1)和SEARCH("b*",A1)都会返回5。
LEFT()函数,从文本的开始部分截取指定数量的字符。参数1指定原始文本,参数2指定截取的字符数量。
RIGHT()函数,从文本的结束部分截取指定数量的字符。参数1指定原始文本,参数2指定截取的字符数量。
MID()函数,从文本指定的位置截至指定数量的字符。参数1指定原始文本,参数2指定开始截取的位置,参数3指定截取的字符数量。
假设A1单元格有文本“中文和abcdefg”,则LEFT(A1,3)返回“中文和”,RIGHT(A1,3)返回“efg”,MID(A1,4,3)返回“abc”。
下面解决一个实际问题——如何在中文字符和英文字符混合内容中提取内容,如姓名和手机号码在一起时,需要提取其中的手机号码。如所示,在A列的数据中包含了姓名和手机号码,而姓名有两个或三个字符,手机号码则是以1开始共11位。
本例相对简单,第一步使用SEARCH()函数获取1开始的位置,然后使用MID()函数从此位置截取11位字符。B2单元格的公式用于截取A2单元格中的手机号码,公式为“=MID(A2,SEARCH("1",A2),11)”,B3和B4单元格的公式可以通过公式复制得到。
最新版本的Microsoft 365 (以前称为Office365)提供了REGEXEXTRACT()函数,可以使用正则表达式操作文本,功能性和灵活性都有质的飞越,如果是在使用Microsoft 365则可以尝试此函数,如果使用单机版的Office也可以通过VBA编程使用正则表达式,在后续文章中会有介绍。
REPLACE()替换指定位置的内容,参数1到参数4分别是原始字符串,开始替换位置,替换字符数量,替换内容。如将手机号码中的第4位到第7位替换为*号可以使用REPLACE("12345678910",4,4,"****"),函数会返回"123****8910"。
此外,生成重复内容时还可以使用REPT()函数,如REPT("ab",3)返回"ababab"。
SUBSTITUTE()函数用于将文本中指定内容替换成新的内容,如文本中是xxx元、xx元,可以将“元”字替换为空白文本,这样就提取了金额的数字部分,如SUBSTITUTE("199元","元","")返回199。
判断内容是否为文本格式时可以使用ISTEXT()函数,当内容是文本内容、单引号开始的内容时返回TRUE,如果单纯的数字、布尔类型、错误类型和空白单元格返回FALSE。相对应的,判断内容是否为数字时可以使用ISNUMBER()函数,当内容为纯数字,即使是单元格格式设置为文本,也会返回TRUE;文本内容、单引号开始的内容、布尔类型、错误类型和空白单元格返回FALSE。
文本格式的数字无法参与计算的,需要将文本内容转换为数值时,可以使用VALUE()函数,如A1单元格为“'1”,则函数VALUE(A1)返回数字1。如果参数内容无法转换为数值,则返回#VALUE!错误。
TEXT()函数可以将文本以指定的格式输出,参数1为需要格式化的文本内容,参数2指定格式化字符,其中的格式符可以参考单元格格式设置中“数字”页“自定义”中的内容。
如数字加上人民币符号和千分位,并保留2位小数,可以使用函数TEXT("123456","¥#,##0.00"),函数会返回"¥123,456.00"。