大家好,欢迎来到IT知识分享网。
问题求助SOS:如何将日期对应的一个单元格内的多个姓名,转换为姓名对应的一个单元格内的多个日期呢?
感觉有些抽象,没关系我们上图上概述。
如下图所示:
A列为日期,B列为值班人员。每个日期所对应的值班人员都聚合到了B列的一个单元格中,且不同姓名之间有明显的分隔符号逗号,我们想要转换为右边表格的模式:将每个值班人所对应的全部日期聚合显示在E列的对应的一个单元格中。

小编习惯将这种类型的一对多数据,且对应的多个数据放置在一个单元格里的情况叫做聚合数据(小编的个人理解概括,如有不同见解,请按照您自己的理解)。
日期对应的聚合人名,转为人名对应的聚合日期,这个Excel逆向思维,你一定得会!下面我们就来讲解一下具体的操作流程。
第一步:合并值班人员
使用TEXTJOIN合并函数:
=TEXTJOIN(“,”,,B2:B5)
使用间隔符“,”逗号,将B2:B5区域的每个单元格的聚合人员数据连接合并起来,放置到一个单元格显示。
这样合并后的值班人员,姓名与姓名之间就全部实现了逗号间隔的效果。

第二步:拆分值班人员
使用TEXTSPLIT拆分函数:
=TEXTSPLIT(TEXTJOIN(“,”,,B2:B5),,”,”)
用行分隔符号“,”逗号,将上一步合并后的数据拆分到不同行显示(拆分行)。
这样我们就实现了,所有值班人员姓名的一列多行化,显示在了一列中。

第三步:值班人员去重。
使用UNIQUE去重函数:
=UNIQUE(TEXTSPLIT(TEXTJOIN(“,”,,B2:B5),,”,”))
因为上一步返回的一列全部的值班人员姓名,其中包含很多重复的人名。因为我们最终要统计的是每个人对应的值班日期。所以要对姓名进行去重。
使用UNIQUE函数,省略第2、第3参数后,实现对上一步返回结果姓名的去重,保留唯一值列表。

第四步:查找
使用经典的FIND查找函数:
=FIND(D2,B$2:B$5)
我们查找D2单元格中的值班人员,在B$2:B$5这个固定区域中的每个单元格内字符出现的起始位置。
那么如果出现过,自然就会返回一个具体的起始位置,没有出现过,就会返回一个错误值。

第五步:判断是否为数字
使用经典的ISNUMBER数字判断函数:
=ISNUMBER(FIND(D2,B$2:B$5))
上一步的结果如果是数字,则返回逻辑值TRUE,否则返回逻辑值FALSE。

第六步:逻辑判断取日期
使用经典的IF条件判断函数:
=IF(ISNUMBER(FIND(D2,B$2:B$5)),A$2:A$5,””)
如果上一步的返回结果为逻辑值TRUE,那么我们取A$2:A$5区域对应行的日期值,否则返回空值即可。
这样我们就得到了,某个值班人在左边表格中对应的所有值班日期。

第七步:日期规范化
使用经典的TEXT文本格式函数:
=TEXT(IF(ISNUMBER(FIND(D2,B$2:B$5)),A$2:A$5,””),”m月d日”)
将上一步返回的由默认数字构成的日期值,转换为“m月d日”格式的日期值,增强日期的可读性。

第八步:合并日期值
再次使用TEXTJOIN合并函数:
=TEXTJOIN(“,”,,TEXT(IF(ISNUMBER(FIND(D2,B$2:B$5)),A$2:A$5,””),”m月d日”))
使用分隔符号“,”逗号,将上一步返回的每个值班人员所属的1个或多个日期值,合并到一个单元格聚合显示。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/183727.html