相信多数人的工作都要和Excel打交道,比如绘制图表、统计分析等。但往往我们要用来绘制图表的原始数据很杂乱,这就需要借助Excel 中的字符串提取函数来对数据进行清理。下面我先介绍一些最常用的字符串截取函数,后面再讲如何借助VBA更快速的截取字符串方法(哈哈,也是懒人必备的一种方法)。
一、常用的字符串截取函数
1.LEFT(text,number)
返回字符串中左边n个字符。
text表示字符串或所在单元格位置,number表示指定个数。
示例:
2.RIGHT(text,number)
返回字符串中右边n个字符。
text表示字符串或所在单元格位置,number表示指定个数。RIGHT函数和LEFT函数用法基本一致,区别在于一个右边一个左边,因此这里也不再举例。
3.MID(text,start_num,number)
返回指定位置开始的n个长度的字符。
text表示要查的字符串或所在的单元格位置,start_num表示开始查的位置,number表示从指定位置开始n个长度。
示例:
二、与截取函数常一起使用的函数
1.LEN(text)
返回文本字符串中的字符个数
text表示字符串或所在的单元格位置。
示例:
注意在EXCEL中是LEN,不是LENGTH。
2.LENB(text)
返回文本字符串中的字节个数,一个汉字表示2个字节,一个英文字母或数字表示1个字节。
text表示字符串或所在的单元格位置
我们可以利用LENB函数的特性提取字符串:LENB-LEN即表示汉字的
个数,如下例中提取最左边的汉字。
示例:
3.SEARCH(first_text,second_text,start_num)
从左到右查,并返回某个特定字符在字符串中第一次出现的位置,不区分大小写。
first_text表示要查的字符,second_text表示要查询字符串或所在单元格位置,start_num表示开始查的位置。
示例:
注意,如果查不到该字符串则会报错#VALUE!,这时借助IFERROR 函数对错误进行处理,如果IFERROR中第一个参数是一个错误,那么就返回第二个参数,在上面的示例中第二个参数是0,因此这里直接返回0。
4.SEARCHB(first_text,second_text,start_num)
从左到右查,并返回某个特定字符在字符串中第一次出现的字节位置(汉字2个字节,英文或字母1个字节),不区分大小写。
字符串复制函数first_text表示要查的字符,second_text表示要查询字符串或所在单元格位置,start_num表示开始查的位置。
SEARCHB与SEARCH用法一致,唯一区别在于SEARCHB返回的是字节位置,而SEARCH返回的是字符位置。
示例:
5.FIND(first_text,second_text,start_num)
从左到右查,并返回某个特定字符在字符串中第一次出现的位置,区分大小写。
first_text表示要查的字符,second_text表示要查询字符串或所在单元格位置,start_num表示开始查的位置。
FIND函数和SEARCH函数的用法一致,区别在于FIND函数区分大小写,而SEARCH函数不区分大小写,因此这里不再对FIND函数的用法进行举例说明。当然,同SEARCH与SEARCHB一样,FIND也有对应的FINDB函数,用法与上述类似,这里就不再过多赘述。
三、复杂点的字符串截取需求
现实工作中业务产生的数据可能非常杂乱,只有你想不到的乱,没有
他办不到的。比如分割开“0上1报2机3制4”中的数字与汉字。对于这个需求,对WORD比较熟悉的同学,可能会立即想到WORD 中的通配符,分别替换两次,再粘贴回EXCEL中,即可得到数字和汉字。
1)替换掉数字
在WORD中按CTRL+H,输入[0-9],下面勾选通配符
替换后的结果为:上报机制
2)替换掉汉字
在WORD中按CTRL+H,输入[!0-9],下面勾选通配符。
替换后的结果为:01234
那么问题来了,对于我这样的懒人,我压根就不想打开WORD,那么在EXCEL中有没有类似的方法呢?