背景
- 我使用公式 1 自动分配工作分解结构 (WBS) 编号 (D15)。WBS 编号 (1、1.1、1.1.1、1.1.1.1 等) 的分配基于从经过验证的列表 (C15) 中选择的 WBS 级别,其中 1=1、2=1.1、3=1.1.1、4=1.1.1.1 等。
- 我使用公式 2 来计算汇总开始日期(T15):
公式1
=IF(C15="","",IF(C15>OFFSET(C15,-1,0,1,1),IF(OFFSET(D15,-1,0,1,1)="","1",OFFSET(D15,-1,0,1,1))&REPT(".1",C15-MAX(OFFSET(C15,-1,0,1,1),1)),IF(ISERROR(FIND(".",OFFSET(D15,-1,0,1,1))),REPT("1.",C15-1)&IFERROR(VALUE(OFFSET(D15,-1,0,1,1))+1,"1"),IF(C15=1,"",IFERROR(LEFT(OFFSET(D15,-1,0,1,1),FIND("^",SUBSTITUTE(OFFSET(D15,-1,0,1,1),".","^",C15-1))),""))&VALUE(TRIM(MID(SUBSTITUTE(OFFSET(D15,-1,0,1,1),".",REPT(" ",LEN(OFFSET(D15,-1,0,1,1)))),(C15-1)*LEN(OFFSET(D15,-1,0,1,1))+1,LEN(OFFSET(D15,-1,0,1,1)))))+1)))
二级方程式
=MINA(V16:V35)
WBS 编号概览
- 任何父编号的汇总开始日期均基于后续“子”开始日期范围中的最小值。
- WBS 级别 1 (1) 汇总开始日期是使用 MINA 公式并手动选择级别 1“子”开始日期的范围(级别 2、3、4 等 [1.1、1.1.1、1.1.1.1 等])获得的。
- WBS 第 2 级 (1.1) 汇总开始日期是使用 MINA
公式并手动选择第 2 级“子”开始日期的范围
(第 3 级、第 4 级等 [1.1.1、1.1.1.1 等])获得的。 - WBS 级别 3 (1.1.1) 汇总开始日期是使用 MINA 公式并手动选择级别 3“子”开始日期的范围(级别 4 等 [1.1.1.1 等])获得的。
- D15 的 WBS 编号为 1,它是 1 下后续“子”编号(1.1、1.2、1.2.1、1.2.2 等)的父级。在这种情况下,1 的汇总开始日期是其子级开始日期范围(V16:V35)中的最小值。
- D16 的 WBS 编号为 1.1,它是 1.1 下任何后续编号的父编号。在本例中,C16(1.1)下目前没有子编号。如果有子编号,则 1.1 的汇总开始日期将是其子编号开始日期范围内的最小值。
- D17 的 WBS 级别为 1.2,它是 1.2 下后续“子”编号(1.2.1 和 1.2.2)的父级。在这种情况下,1.2 的汇总开始日期是其子级开始日期范围(V18:19)中的最小值。
可视化
问题
手动选择子项的开始日期来查找父项的汇总开始日期既低效又不雅观。添加其他 WBS 项需要更改“子项”开始日期的范围。
问题
根据 WBS 编号:如何使用 MINA 公式获取父级汇总开始日期(“子级”开始日期范围内的最小值),而不必手动选择其子级的开始日期范围?
对于父项,如何显示其子项的最早开始日期?
对于没有子项的项目,我如何显示它们的预计开始日期,直到它们有子项(并显示其子项的最早开始日期)?
答案1
一般来说,方法是:
- 确定每行的父 WBS
- 取父 WBS 每个值的累计开始日期的最小值
父 WBS 就是 WBS 减去最右边的整数和一个句点。因此,为了得到它,我们只需删除这两个东西。棘手的部分是知道要删除多少文本,并确保我们考虑到多于一位数的整数(例如 1.2.1.12 或 1.2.123)。
为此,我们需要以某种方式将最右边的整数与 WBS 的其余部分分开。要做到这一点那,我们可以先统计一下 WBS 中的期间数。这只是第 1 级。
=$B2-1
接下来,我们可以使用 SUBSTITUTE 将 ($B2-1) 第 n 个句点替换为另一个符号。我使用了 @。
=SUBSTITUTE($C2,".","@",$E2)
由于现在结果字符串中只有一个@,因此使用 RIGHT 可以轻松获取该符号后的所有文本:
=RIGHT($F2,LEN($F2)-FIND("@",$F2,1))
接下来,我们只需从 WBS 中删除该整数加上尾随的句点:
=IF($E2>0,LEFT($C2,LEN($C2)-LEN($G2)-1),"")
这为我们提供了父 WBS。
所有上述步骤都可以合并为一个公式,如下所示:
=IF(($B2-1)>0,LEFT($C2,LEN($C2)-LEN(RIGHT(SUBSTITUTE($C2,".","@",$B2-1),LEN(SUBSTITUTE($C2,".","@",$B2-1))-FIND("@",SUBSTITUTE($C2,".","@",$B2-1),1)))-1),"")
最后一步是使用 MINIF 获取按父 WBS 划分的最小汇总开始日期:
=MINIFS($D$2:$D$23,$I$2:$I$23,$I2)
编辑:
不是 100% 确定您关于无子项的观点是什么意思,但如果是“如果 WBS 是父项,则显示父项汇总日期,否则显示预计日期”,那么您可以添加以下公式:
=IFERROR(VLOOKUP($C2,$I$2:$J$23,2,FALSE),$D2)
基本上,如果您可以在父 WBS 列中的当前行找到 WBS 编号,则无论在何处找到父 WBS,都返回父汇总开始日期。否则,请使用 D 列中的值。
为了使上述 VLOOKUP 正常工作,我必须编辑返回父级 WBS 的公式,以便它以数字而不是文本的形式返回值。
=IF(($B2-1)>0,NUMBERVALUE(LEFT($C2,LEN($C2)-LEN(RIGHT(SUBSTITUTE($C2,".","@",$B2-1),LEN(SUBSTITUTE($C2,".","@",$B2-1))-FIND("@",SUBSTITUTE($C2,".","@",$B2-1),1)))-1)),"")