在 Excel 中跟踪任务依赖性

Track task dependencies in Excel

我的 excel sheet 中有两个选项卡。

选项卡 1:包含跨多个功能区域的所有依赖项的列表。这些列是功能区域、依赖项描述、依赖项 ID、计划结束日期、目标结束日期。

选项卡 2:包含具有以下列的任务列表:

职能领域、可交付成果名称、可交付成果描述、目标日期、预计日期、依赖项 ID

例如

Functional Area Dependencies  Plan end date  Target End date
   F1            D1            8/22           8/22
   F1            D2            8/23           8/23
   F2            D3            8/24           8/24
   F2            D4            8/25           8/25

Functional Area Deliverable Dependencies Target Date  Projected Date
   F1                de1       D1, D2        8/20           
   F1                de2       D1            8/20           
   F2                de3       D3, D4        8/20           
   F2                de4       D3            8/20           

依赖项 ID 将包含与选项卡 1 中的给定可交付成果关联的所有 ID。我想要的帮助是一种方法,可以查明与给定可交付成果关联的任何依赖项的日期是否超过了目标日期在我的可交付成果中,我的预计日期应该填充到所有依赖项中的最新日期。因此,在上面的示例中,de1 的预计日期应填充为 8/23,d2 的预计日期应为 8/22。请指教。谢谢。

您需要三件才能让它发挥作用。第一个是这个公式(我们开始研究 Tab2):

=TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),1*255,255),",",""))

单元格 C2 包含依赖项列表,例如D1, D2

注意公式中的 1*255 位 - 如果将 1 更改为 2,则此公式会给出依赖项列表中的第二项,然后是第三项,依此类推

现在我们有三个公式可以给出第一、第二或第三依赖性:

=TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),1*255,255),",",""))

=TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),2*255,255),",",""))

=TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),3*255,255),",",""))

我们将采用每个公式并将它们包装在一个 vlookup 中 - 这将从 Tab1 中查找目标结束日期:

=VLOOKUP(TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),1*255,255),",","")),Tab1!$B:$D0,3,FALSE)

在此公式中,我假设要查找的数据在 Tab1!$B:$D0 中,并且我假设目标结束日期在第三列中。请注意,这还假定依赖列是 B 列。

这个公式将给我第一个依赖项的目标结束日期。

我们几乎准备好将它们包装到一个函数中,但在此之前,我们要防止 vlookup 错误:

=IFERROR(VLOOKUP(TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),1*255,255),",","")),'Tab1'!$B:$D0,3,FALSE),0)

现在我们可以使用 Max 函数组合所有三个,这将为我们提供最大(最新)日期:

=MAX(IFERROR(VLOOKUP(TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),1*255,255),",","")),'Tab1'!$B:$D0,3,FALSE),0),IFERROR(VLOOKUP(TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),2*255,255),",","")),'Tab1'!$B:$D0,3,FALSE),0),IFERROR(VLOOKUP(TRIM(SUBSTITUTE(MID(SUBSTITUTE("," & C2&REPT(" ",6),",",REPT(",",255)),3*255,255),",","")),'Tab1'!$B:$D0,3,FALSE),0))