【问题标题】:Track task dependencies in Excel在 Excel 中跟踪任务相关性
【发布时间】:2018-02-02 06:27:36
【问题描述】:

我的 Excel 表格中有两个选项卡。

选项卡 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。请指教。谢谢。

【问题讨论】:

  • 我正在做一些事情,但更容易的是有第三个选项卡,称为可交付依赖项。这将有一个单行,例如德1 | D1, 德1 | D2 等 - 这可能吗?
  • 嗨 Cronan - 那么您的意思是删除可交付成果 - 依赖项列并移至第三个选项卡吗?如果只是出于计算目的,我可以创建另一个选项卡并将这两列复制到那里。那行得通吗?
  • 抱歉,不,我的意思是另一个选项卡,它有两列,依赖项和可交付项。如果 de1 有两个依赖项,这个新选项卡将有两行,de1 重复两次。使您的问题真正难以解决的是选项卡 2 上的依赖项被复合到一个单元格中的方式。
  • 是的,我们可以做那个克罗南。我同意,这就是我一直在挣扎的原因。理想情况下,这在项目中非常容易,但我需要使用 excel。那么,如果我们按照您推荐的方式创建第三个选项卡,您会提出什么解决方案?

标签: excel excel-formula excel-2010 excel-2007 vba


【解决方案1】:

您需要三个部件才能使其正常工作。第一个是这个公式(我们开始研究 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$2:$D$100,3,FALSE)

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

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

我们几乎已经准备好将它们封装成一个函数,但在此之前,我们要防止 vlookup 错误:

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

现在我们可以使用 Max 函数将所有三个结合起来,这将给出最大(最新)日期:

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

【讨论】:

  • 此方法不需要添加第三个标签 - 如果有任何不清楚的地方请告诉我
  • 谢谢克罗南。我很快就会试一试,让你知道它有效
  • 嗨 Cronan - 该公式运行良好,但无论如何都要使该公式动态化,因为某些功能区域有 3 个依赖项,有些有 6 个,有些有 8 个。这些依赖项可以不断添加,删除所以需要以这种方式使其动态化
  • 使其动态化的最佳方法是更改​​工作表的格式:例如规范化数据,类似于使用数据库。然后就可以使用 DSUM 等函数了
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
相关资源
最近更新 更多