快速计算出每名员工参与了几个项目No.268
优秀创作者
到了年底,在统计本年度的项目完成情况的时候,需要统计每名员工参与了几个项目,并根据员工参与项目的情况来统计项目奖金,前期分配项目的时候是按不同的项目来分组的登记,如项目A,项目B,分别由不同的员工完成。这样交错在一起,要统计具体每名员工参与了多少项目,就变得比较复杂了,希望设计一个公式,一键统计出员工参与的项目数量,并把项目明细也同时标记出来。
效果如下图1所示:
图1
需求分析:
通过观察可以发现,这又是一个类似“表格变形”的需求,这个表格不是简单的二维数据转一维数据,而是二维数据(表1)转成一维数据后,再转成表2的(二维数据)。
相当于二维转二维,只不过是转换过程中切换了统计条件,表1的统计维度是按项目来统计,二维显示的是姓名。转换后的表2的统计维度是按员工姓名来统计的,二维显示的项目。
所以,不管是怎么样的转换变形,只需要想办法转换成一维数据就可以了,因为一维数据转换成功后,就可以按需求转换成任意的二维数据。
统计参与人数:
转换一维表的标准就是需要看现有表1中的每个项目的参与人数,通过参与人数来分行,所以加入辅助列,统计参与人数,因为参与人数这边有明显的特征,就是不同人员是用符号“、”分隔的。
所以只需要用分列函数分成多列后,再统计具体有多少列就可以知道有多少参与人数了。录入公式:
=ROWS(TEXTSPLIT(C3,,"、"))
函数释义:
TEXTSPLIT函数用于按照指定的分隔符"、"将文本拆分成多行(4行),然后ROWS函数用于获取拆分后的行数,得到数字4,也就是参与的人数。
下拉填充公式
效果如下图2所示:
图2
转换成一维表:
有了参与人数这个辅助列,配合重复次数函数,就可以把项目列转换成一维数据,录入函数:
=TEXTSPLIT(CONCAT(REPT(B3:B8&"/",D3:D8)),,"/",1)
函数释义:
用重复函数REPT连接一个特殊符号"/"后,根据D3:D8显示的数字分别重复4次、3次、2次……,再用CONCAT连接成位一个单元格,最后用TEXTSPLIT按符号"/",再次分列成多个单元格,并按行显示。
效果如下图3所示:
图3
项目重复好了后,就需要把对应的姓名也一一的对应上,录入函数:
=TEXTSPLIT(TEXTJOIN("、",,C3:C8),,"、")
函数释义:
用符号"、",通过TEXTJOIN把C3:C8的姓名连接到一个单元格,再通过TEXTSPLIT函数用符号"、",再次分列成一个垂直方向数组。这样通过两次转换就得到一个标准的一维数据了;
效果如下图4所示:
图4
转换成二维表:
有了一维表后,现在就可以方便的转成二维表,二维表条件一,员工姓名,录入函数:
=UNIQUE(G3#)
函数释义:
对姓名的一维数据去除重复项,得到员工姓名的唯一值。
录入函数:
=ROWS(FILTER($F$3#,$G$3#=I3))
函数释义:
对一维数据按员工姓名筛选,显示员工对应的项目数,最后用ROW统计有多少个项目,得到项目数量。
录入函数:
=TEXTJOIN("、",,FILTER($F$3#,$G$3#=I3))
函数释义:
对筛选函数,筛选后的结果(员工对应的项目名称),用合并函数TEXTJION 合并成一个单元格,并用符号“、”分隔。
效果如下图5所示:
图5
到这里已经完成了员工对于参与项目的数量统计,HR部门可以根据员参与的项目数量来分配奖金了。最后的建议,数据的统计最好是用一维数据来作为基准录入,这样在后续的分析与统计,无论是想按项目来分,还是按员工来分,都非常方便。
和古哥一起学习PMC生产计划运营,一辈子够不够?
关注古哥计划
WPS 新函数 EXPAND 实现工单快速分拆 No 266
WPS 新函数 CHOOSECOLS 快速对齐错乱列 No 265
WPS 新函数 WRAPROWS 把错乱的数据整理成标准二维数据 NO 261