数据处理过程中,有时候我们需要从数据列中提取出自己想要的值,作为新的列去使用,我们来看看通过函数如何实现拆分与提取数据吧~
场景一:使用文本函数提取数据
需求1:提取订单编号中的前缀、中间、后缀部分。
分析:订单编号非常规律,前缀是6位,中间是9位-后缀是4位,可以直接使用对应的文本截取函数进行提取数据。
公式:
前缀:=LEFT(A3,6)
中间:=MID(A3,8,9)
后缀:=RIGHT(A3,4)
文本截取函数 | 含义 |
LEFT(文本,截取个数) | 左截取:从文本左边截取对应个数的内容 |
MID(文本,开始截取的位置,截取个数) | 中间截取:从文本指定位置截取对应个数的内容 |
RIGHT(文本,截取个数) | 右截取:从文本左边截取对应个数的内容 |
进阶需求:订单编号中的前缀、中间、后缀的长度不一致
公式:
前缀:=LEFT(A3,FIND("-",A3)-1) —使用LEFT左截取,截取个数根据第一个“-”的位置确定。
中间:=MID(A3,FIND("-",A3)+1,FIND("-",A3,FIND("-",A3)+1)-FIND("-",A3)-1) —使用MID中间截取,截取开始的位置根据第一个“-”的位置确定,截取的个数根据第二个“-”的位置减去第一个“-”的位置的差值确定。
后缀:=MID(A3,FIND("-",A3,FIND("-",A3,FIND("-",A3)+1))+1,10)—使用MID中间截取,
截取开始的位置,通过第2个“-”的位置来确定,通过FIND查找,查的开始位置为第一个“-”的位置加1
截取个数的数值可以写大点,超过了就已有的个数会按照已有个数取。
文本查找函数 | 含义 |
FIND/SEARCH(要查的文本, 被查的文本, 查的开始位置) | 要查文本在被查的文本的第一个位置(找不到返回 #VALUE!),省略第三参数,默认为1 |
FIND与SEARCH的区别: FIND— 识别大小写字母,不可以使用通配符 SEARCH— 不识别大小写字母,可以使用通配符 |
需求2:将数据中的单位与数字分开
公式:
单位:=RIGHT(A3,LENB(A3)-LEN(A3))—使用RIGHT右截取,截取个数等于字节长度-字符长度
数字:=LEFT(A3,LEN(A3)-(LENB(A3)-LEN(A3)))—使用LEFT左截取,截取个数=字符长度-(字节长度-字符长度)(字节长度-字符长度,其实是文字的个数,整体的个数减去文字的个数就是数字个数)
文本长度函数 | 含义 |
LEN(文本) | 字符长度(一个数字、文字、符号、英文各自为1个字符) |
LENB(文本) | 字节长度(一个中文、标点符号都各自为2个字节,英文、数字是1个字节) |
需求3:将地址中的省份、城市、详细地址分开
省份是截取地址中的省或者区的信息;城市是截取市的信息;详细地址是市后面的信息
公式:
省份:=LEFT(A3,FIND(IF(ISNUMBER(FIND("省",A3)),"省","区"),A3))
使用LEFT从左截取,截取的长度,可以根据省或者区的位置,通过FIND找,需要知道第一个参数是省还是区,通过IF判断,如果找到“省”,就是省,否则就是“区”。而find找不到把#VALUE!错误,我们通过ISNUMBER,将其变成TRUE或者FALSE。
城市:=MID(A3,FIND(IF(ISNUMBER(FIND("省",A3)),"省","区"),A3)+1,FIND("市",A3)-FIND(IF(ISNUMBER(FIND("省",A3)),"省","区"),A3))
直接使用MID中间截取,截取的位置通过市或者区的位置来确定,截取的个数根据“市”的位置减去市或者区的位置来确定。
详细地址:=MID(A3,FIND("市",A3)+1,99)
直接使用MID中间截取,截取的位置通过找“市”的位置
需求4:提取指定的字符最后一次出现后的数据
提取文本中第二列指定字符最后一次出现后的数据
方法一:将最后一个指定的字符替换成一个很大的字符(々),然后通过MID中间截取,截取开始的位置就是“々”的位置,截取个数可以写大点即可
最主要的是如何只替换最后一个指定字符将其变成(々)
将所有的指定字符替换为空,总长度-替换后的字符=查找字符的个数,个数正好是最后一个指定的字符。
=MID(A3,FIND("々",SUBSTITUTE(A3,B3,"々",LEN(A3)-LEN(SUBSTITUTE(A3,B3,""))))+1,99)
方法二:将所有的指定字符替换为99(很多)个空格,然后右截取一个比较大的字符(包括想要提取的数据),然后进行清洗,去掉空格即可
=TRIM(RIGHT(SUBSTITUTE(A3,B3,REPT(" ",90)),90))
函数 | 含义 |
SUBSTITUTE(文本,被替换的字符,新的字符, 替换第几个) | 对指定的字符进行替换 |
REPT(文本,重复的次数) | 将文本重复一定的次数 |
TRIM(文本) | 除了单词之间的单个空格外,清除文本中所有的空格 |
需求5:提取不规范日期格式中的年月日
这个比较简单,就不多说了
场景二:使用日期函数提取数据
需求1:从规范的日期分别提取对应的数据
列 | 公式 | 函数 | 含义 |
年 | =YEAR(A3) | YEAR(日期) | 返回日期的年份值 |
月 | =MONTH(A3) | MONTH(日期) | 返回日期的月份值 |
日 | =DAY(A3) | DAY(日期) | 返回一个月中的第几天的数值(1-31) |
小时 | =HOUR(A3) | HOUR(日期) | 返回一个时间值中的小时数 |
分钟 | =MINUTE(A3) | MINTUTE(日期) | 返回一个时间值中的分钟数 |
秒 | =SECOND(A3) | SECOND(日期) | 返回一个时间值中的秒数 |
星期几 | =WEEKDAY(A3,2) | WEEKDAY(日期,周期类型) | 返回日期在一周的第几天(以第二参数确定周期) |
日期 | =DATE(YEAR(A3),MONTH(A3),DAY(A3)) | DATE(年,月,日) | 返回指定的日期 |
月末 | =EOMONTH(A3,0) | EOMONTH(日期,日期之前或之后的月份数) | 返回指定日期之前或之后某个月的最后一天的日期(月底)(Months为0则当前月份) |
文章虽然是实现数据的拆分与提取,但是其中基本上将常用的文本和日期函数说的差不多了,而且除了使用函数之外,一些技巧也能实现数据的拆分,比如快速填充(CTRL+E)和分列,分列大家可以看这个文章Excel中强大的分列功能,常见用法你了解吗?。之前文章也讲解过如何拆分工作表(将工作表按照某个字段拆分成多个工作表),大家可以也看做数据的拆分与提取。大家有什么问题,欢迎在评论区留言~
留言与评论(共有 0 条评论) “” |