工作中总会有一些奇葩的特殊需求,最让人头疼的莫过于将符合条件的多个结果全部放到一个单元格内,这种汇总方式,就是传说中的“一勺烩”啊。 举个例子,请看下图。 A列是某公司部门名称,B列是人员姓名。 要求将相同部门的人员姓名填入F列对应单元格,不同人名之间以逗号间隔。 看到这里,想必有人在心里嘀咕了: 小子啊,你这数据处理不规范啊,你怎么能把这么多人名放一个单元格呢? 你这是违反数据规律,作死吧…… 停停!!—— 俺星光英明神武,压过马路,上过房梁,当然知道这数据的存放格式是有待商榷的,是不利于以后数据再处理的,是有害有毒有失水准滴…… 然而,可是!但是!不得不说的是!! 作为表哥表妹大军中的一员,俺更深知表格数据生杀予夺从不在我,而在于那位老是板着脸的……老板。 比如: 老板让你处理一段数据。 你对老板说:“老板,这数据我不能处理,为啥嘞?——因为你这数据不规范!!” 老板:“……” 老板让你把所有同一类型的内容放到一个单元格里。 你对老板说:“老板,这数据我也不能处理,为啥嘞?——因为你要的结果数据不规范!!” 老板:“……”
首先在C2输入公式: =IF(A2=A1,C1&','&B2,B2) 向下复制填充。 F2输入公式: =LOOKUP(1,0/(E2=$A$2:$A$9),C$2:C$9) 向下复制填充,得到最终结果。 这个解法使用了辅助列的方式。 C列为辅助列,是一个简单的IF函数。 以C2的公式为例: =IF(A2=A1,C1&','&B2,B2) 先判断A2和A1的值是否相等,如果相等,则返回C1&','&B2,如果不等,则返回B2。 此处A2和A1的值不相等,因而公式返回B2的值'祝洪忠'。 在公式向下复制填充的过程中,该公式得出的结果,将被公式所在单元格下方的下一个公式所使用,于是形成人名累加的效果。 比如C3单元格公式: =IF(A3=A2,C2&','&B3,B3) A3和A2的值相等,返回真值C2&','&B3。 C2为上个公式所返回的结果B2(祝洪忠),B3的值是'星光',所以C3最后结果为'祝洪忠,星光'。 辅助列公式输入完成后,在F列使用了一个常用的LOOKUP函数套路,得到最终结果: =LOOKUP(1,0/(E2=$A$2:$A$9),C$2:C$9) LOOKUP的这个套路,忽略错误值,总是取得最后一个符合条件的结果,我们可以总结为: =LOOKUP(1,0/(条件区域=指定条件),要返回的目标区域) 该公式以0/(E2=$A$2:$A$9)构建了一个由0和错误值#DIV/0!组成的内存数组,再用永远大于0的1作为查找值,于是查找出最后一个满足部门等于E2的C列结果,即A列最后一个广告部所对应的C列值,也就是C2单元格中的内容。 |
|
来自: hercules028 > 《excel》