这是一位学员朋友咨询的问题,帮她实现了模型,属于 Excel 在项目管理方面的高级运用。经同意,脱敏后和大家分享这种应用方法。
(点击看大图)
项目管理为什么不用 Project 做呢?越是复杂的项目,越应该使用 Project 来管理,毕竟是专门的软件。不过有时候考虑到普及性,如果项目文件发给干系人,很多人都无法打开查看。而使用 Excel 有个好处,大家都可以看,甚至还可以修改。因此,Project 和 Excel 可以同时使用。
事实上,很多项目管理都有使用 Excel 来进行管理。下图是我看到的一个老外的例子,就是在一张大画布上铺开来工作,这种灵活性,Project 是没有的。
(点击看大图)
本例需求
一个大型的复杂项目,涉及很多外部单位,项目周期约3年。作为 High level 层面的项目管理,主要是监控各责任单位的关键里程碑和检查点。希望能用直观的图示,而不是密密麻麻的列表。
制作思路
使用散点图,按责任单位分行、分类打点,标记里程碑、检查点。不过,实际做的过程中发现,同一责任单位在同一日期可能有多个任务事件,打点的结果是重叠的,因此在准备各节点的y坐标时,要考虑到这种情况并予以避免。如何清晰显示这些节点的事件信息,也需要优化考虑。
(点击看大图)
一、静态图示
1、
首先,提取出所有责任单位名称。复制责任单位到x列,使用删除重复值,就得到了所有参与单位列表,分别编号14~1,作为y坐标,反映到图表上会由上而下地显示。
2、
对于每个事件点,在图表中的y坐标值,要考虑同一责任单位在同一日期可能有多个任务事件,需要予以错开:
K3:=VLOOKUP(E3,$X$3:$Z$17,3,0)-(COUNTIFS($E$3:E3,E3,$F$3:F3,F3)-1)/5
这个公式会统计同一责任单位在同一日期下的事件个数,每多一个,就将y坐标减少一点,避免重叠。
3、
里程碑和检查点事件要分开标示,因此分离为两个序列:
MS里程碑序列:
x,L3:=IF('data&cacl'!$B3=$L$2,'data&cacl'!$F3,NA())
y,取K列的y
CP检查点序列:
x,N3:=IF('data&cacl'!$B3=$N$2,'data&cacl'!$F3,NA())
y,取K列的y
4、
用L~O列的数据做散点图,得到两组xy散点图,分别代表里程碑节点和检查点节点。
5、
准备x~z 3列的数据,加入图表,添加数据标签,在图表左侧显示各责任单位名称。
6、
准备AB~AD 3列的数据,加入图表,添加数据标签,显示顶部和底部的x轴标签,并添加误差线,作为垂直的网格线。这是因为每季度的天数是不一样的,内置的网格线无法做到按每季度末不等距地显示。
现在,图示已完成,但还不知道这些节点分别是什么任务,全部添加标签又是不可能的,会非常凌乱无法阅读。
二、控件交互
为解决前述问题,先考虑提供选择责任单位的功能,每次仅显示所选单位的事件名称。
7、
制作一组单选按钮,供用户选择责任单位,选择结果放在W2,对应的单位名称是W1。
8、
再准备P~R列的数据,用来突出显示当前所选单位的节点事项:
x,P3:=IF('data&cacl'!$E3=$W$1,'data&cacl'!$F3,NA())
y,取K列的y
标签,R3:=IF('data&cacl'!$E3=$W$1,'data&cacl'!$C3,"")
9、
加入图表,数据标记设置为圆圈,添加数据标签为R列,靠下,竖排。
10、
另准备S8~U8的数据,加入图表,用来突出显示左侧当前责任单位的名称标签。
这样,当用户选择某个责任单位,左侧该单位的名称被突出显示,右侧所有事件节点被圈出,并显示事件信息。
做选择按钮的时候特意多放了1个“不显示标签”的选项,但其结果肯定是查不到的数据的,所以图中就没有突出显示了。
三、悬停交互
即使这样,对于第1个单位,因为事件比较多,标签还是不易看清楚。因此,考虑增加鼠标悬停节点突出显示事件信息的功能。
这个需要用到vba,难度比较高,这里不详述,可参考《
Excel图表中的悬停技术
》《
仿微信动态图表
》两篇帖子。