我正在创建一个时间表,供那些不太精通Excel的同事使用。他们希望根据输入的日期以及可以编辑的持续时间来计算计划的开始/结束日期。他们不想编辑实际的计划日期。
至关重要的是,它们能够在我创建的表中添加/删除行。但是,每次尝试进行测试时,我输入的用于计算“计划的开始/结束日期”的公式都会中断。
我尝试将公式直接输入到表格中,还尝试在表格旁边(但不在表格中)输入公式,并引用这些单元格填充日期。
我也尝试引用列的实际名称而不是列字母。
每个单元格代表什么的解释:
D7: Whether to calculate the dates based on Project Start Date or In Warehouse Date
D8: Specified date
Column E: Duration (Days)
Column F: Planned Start
Column G: Planned End
计划的开始日期公式(非常第一行):
=IF($D$8="","",IF($D$7="Project Start Date",$D$8,IF($D$7="In Warehouse Date",G11-E11+1,"")))
计划的开始日期公式(第一行之后的所有行):
=IF($D$8="","",IF($D$7="Project Start Date",F11+E11,IF($D$7="In Warehouse Date",G12-E12+1,"")))
计划的结束日期公式(最后一行):
=IF($D$8="","",IF($D$7="Project Start Date",F35+E35-1,IF($D$7="In Warehouse Date",$D$8,"")))
计划的结束日期公式(最后一行之前的所有行):
=IF($D$8="","",IF($D$7="Project Start Date",F34+E34-1,IF($D$7="In Warehouse Date",G35-E35,"")))
公式可以正确计算日期。但是,只要我添加或删除行,它们就会中断。添加行时,它会推送Duration引用,以使它始终在添加的行之后偏移一行。删除行时,它会完全破坏公式,并用#REF替换Duration引用。
我对VBA有点熟悉,因此,如果我能够使用Macro或VBA代码以某种方式解决此问题,我将非常乐于尝试。
谢谢!
答案 0 :(得分:1)
我相信我已经找到了解决我的问题的方法!我在公式中用OFFSET
和INDIRECT
的组合替换了所有相对引用,现在可以使用了!对于计划开始日期的第一行,对于计划结束日期的最后一行,我只保留了公式。
对于计划的开始日期中间行,这是现在的公式:
=IF(OR($D$7="",$D$8="",INDIRECT("E" & ROW())=""),"",IF($D$7="Project Start Date",OFFSET(INDIRECT("F" & ROW()),-1,0)+OFFSET(INDIRECT("E" & ROW()),-1,0),IF($D$7="In Warehouse Date",INDIRECT("G" & ROW())-INDIRECT("E" & ROW())+1,"")))
对于计划结束日期的中间行,现在的公式如下所示:
=IF(OR($D$7="",$D$8="",INDIRECT("E" & ROW())=""),"",IF($D$7="Project Start Date",INDIRECT("F" & ROW())+INDIRECT("E" & ROW())-1,IF($D$7="In Warehouse Date",OFFSET(INDIRECT("G" & ROW()),1,0)-OFFSET(INDIRECT("E" & ROW()),1,0),"")))